Конференция "Сети" » TIdCmdTCPServer
 
  • Сергей М. © (07.09.09 14:12) [60]

    > про ресурсы ему еще рано


    Тогда и делать ему пока нефига в индейских серверах. Не по сеньке шапка.
    Есть TServerSocket, есть stNonBlocking - там ему "было проще всё, ну или понятней".
    Какого лешего ему понадобилось лезть в индейские мультипоточные блокирующие дебри - до сих пор не понятно.
    Было бы хотя бы вразумительное обоснование выбора Инди - был бы тогда и стимул вдалбливать ему про синхронизацию и прочую мультипоточную требуху. А так  - что о стенку горох)
  • Медвежонок Пятачок © (07.09.09 14:57) [61]
    правильная конфигурация:
    сервер постоянно читает запросы клиентов.
    получив запрос клиента, отправляет ему ответ, затем снова читает/ждет следующий запрос.

    рассылка всем клиентам сообщения по инициативе сервера:
    сервер получает текст сообщения от администратора и ничего никуда не посылает. Запоминает его и ждет, когда клиент запросит " А нет ли для меня какого-нить сообчения?"
    Получив подобный запрос клиента, сервер отдаети ему сообщение прямо в обработчике команд, без всяких локлистов и прочей ерунды.
  • Сергей М. © (07.09.09 15:09) [62]

    > без всяких локлистов и прочей ерунды


    В мультипоточном сервере без lock-тряхомудии вряд ли обойтись)
    Другой вопрос - она нада ли автору, мультипоточность та самая ..
    Впрочем, он и сам не знает.
  • Медвежонок Пятачок © (07.09.09 15:14) [63]
    локлист нужен для операций по инициативе сервера.
    допустим что клиент у нас "событийный", а сервер "процедурный".
    то есть все построено задом наперед.
    тогда да.
    лочим список коннектов, засылаем клиентам мессаджи и разлочиваем.
    если же сервер посторить как строят его нормальные герои (ожидание запроса->обработка->посылка ответа ), то лочить ничего не надо.
    все происходит либю в OnExecute, либо в диспетчерах прикладных команд.

    Но нах юный друг хочет чтобы и сервер и клиент были одновременно и сервером им клиентом.
  • Сергей М. © (07.09.09 15:34) [64]

    > лочить ничего не надо


    Ну как же не надо ?


    > все происходит либю в OnExecute, либо в диспетчерах прикладных
    > команд


    Все это происходит в контексте треда, обслуживающего текущий коннект.
    И тред этот и обслуживаемый им коннект полностью изолированы от прочих тредов сервера, обслуживающих как прочие коннекты, так и внутрикухонные нужды сервера. Все эти треды сервера так или иначе, рано или поздно обязательно пересекутся на доступе к тому или иному потоконебезопасному ресурсу, а, значит, потребуется синхронизация. Как она д.б. реализована - то ли локами, то ли синхр.сообщениями, то ли задействованием иных объектов илои способов синхронизации - другой вопрос.
  • Медвежонок Пятачок © (07.09.09 15:45) [65]
    Ну это само собой разумеется.
    Но я-то про Среадс.ЛокЛист говорил конкретно.
    Точнее про то, что он почти никогда не нужен правильному серверу.
  • Сергей М. © (07.09.09 15:47) [66]

    > про то, что он почти никогда не нужен правильному серверу


    С этим солидарен.
  • Zalm © (07.09.09 17:05) [67]
    правильный сервер... я бы вобще не назвал то что мне нужно сервером.
    Вобщем ладно, спасибо вам за участие в теме, понял что помощи не будет
  • Медвежонок Пятачок © (07.09.09 17:17) [68]
    фигасе заявки. "помощи не будет".
  • Сергей М. © (07.09.09 17:18) [69]

    > я бы вобще не назвал то что мне нужно сервером


    Обзови его хоть горшком - как он был сервером, так он им и останется.
    Его задача - обслуживать (to serve) клиентов, если они не в состоянии сами себя обслужить.


    > помощи не будет


    Тебе уже 68 постов только и делают, что помогают, а ты все не внемлешь.
  • Сергей М. © (07.09.09 17:30) [70]

    > если бы я писал через TServerSocket  я бы не задавал таких
    > тупых вопросов


    Глубоко в этом сомневаюсь.
    Были бы другие, но не менее тупые.
  • Zalm © (07.09.09 17:48) [71]
    Server.Bindings.BindingByHandle(handle : cardinal)

    а это что делает?
  • Zalm © (07.09.09 17:51) [72]
    вот что сложного ответить на вопрос как отправить клиенту строку зная либо хендл, либо его адрес, либо его индекс подключения?)
  • Zalm © (07.09.09 18:07) [73]
    что вобще сложного в том сервере который мне нужен? та же структура что и у сервера аси, получил передал сразу вот и всё...
  • Медвежонок Пятачок © (07.09.09 18:10) [74]
    получил передал сразу вот и всё...

    не сразу, а только по запросу того, кому это предназначалось.
  • Медвежонок Пятачок © (07.09.09 18:14) [75]
    Вот я клиент твоей аси.
    И Сергей М. тоже клиент.

    Я нажимаю кнопку и запрашиваю инфо о контакте Сергея М.
    В это время он мне шлет сообщение "Превет Медвет"
    Сервер его получает и тут же сразу же мне его шлет.
    А я в это время отправил запрос о его профиле и жду его.
    А в ответ мне вместо данных его профиля приходит "Превет Медвет".
    Я (точнее твой чудо-клиент аси) при этом в полной уверенности что:
    1. Получил не сообщение, а инфу о профиле Сергея М
    2. Мне не пришло текстовое сообющение от Сергея М

    дальше разжевывать надо?
  • Zalm © (07.09.09 18:23) [76]
    ася что ли сидит и спрашивает у сервера есть ли для неё сообщения?

    вобще один товарищ посоветровал не возится с таким сервером "посредником" а связать компы не имеющие выделенных адресов через VPN. Тока я еще не совсем дочитал что это такое... так что пойду читать, мб и не нужен будет такой сервер...
  • Медвежонок Пятачок © (07.09.09 18:27) [77]
    ася что ли сидит и спрашивает у сервера есть ли для неё сообщения?

    Ты лучше спроси как она вообще получает сообщения ничего не запрашивая (якобы) и ничего не читая (якобы).
  • Медвежонок Пятачок © (07.09.09 18:29) [78]
    Хотя этот вопрос лишний.
    Ты попробуй сначала выкрутится из ситуации, что описана у меня в [75].

    Когда в ответ на запрос информации о контакте приходит не инфа о контакте, а "Превет Медвет".
  • Zalm © (07.09.09 18:34) [79]
    ну а что там выкручиться, сложности никакой.
    например синтаксис для собщения MSG_<сообщение>, а для инфы INFO_<инфа>, и какой тут напряг? придет себе сообщение, будет оно как сообщение, а инфу по-прежнему ждем
 
Конференция "Сети" » TIdCmdTCPServer
Есть новые Нет новых   [134437   +29][b:0][p:0.001]