Delphi TCP Socket Server - рассылка / ответ нескольким клиентам одновременно - PullRequest
2 голосов
/ 16 марта 2012

Недавно я начал разработку простой flash (flash ограничена tcp) многопользовательской игры в реальном времени, и мне был нужен сервер для обеспечения связи между клиентами. Я решил использовать Delphi XE + Indy для этой цели, но обнаружил, что Indy предлагает модель синхронной связи. (Я никогда не использовал ни один из компонентов Indy.)

До сих пор я понимал, что синхронная (блокирующая) модель ограничивает параллелизм и, таким образом, делает компонент сервера Indy TCP неподходящим для многопользовательской игры в реальном времени.

Мой вопрос: должен ли я использовать неблокирующее общение и какие инструменты (компоненты, классы и т. Д.) Являются лучшими для его реализации?

Также я буду очень рад, если вы предоставите мне пример (исходный код) использования этого инструмента для трансляции сообщения. - Я хочу отправить одно и то же сообщение каждому члену определенной "комнаты" одновременно (но не отправлять сообщение другим участникам комнаты.).

PS Извините за мой плохой английский (я не говорю по-родному):)

Заранее спасибо. Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

Вы неправильно понимаете, как работает Инди.Да, он использует блокирующие сокеты, но это не значит, что его нельзя использовать асинхронно.Компонент TIdTCPServer является многопоточным.Он обрабатывает несколько клиентских подключений параллельно.Безусловно, можно отправлять сообщения от одного клиента другому и передавать сообщения нескольким клиентам.Я уже много раз публиковал такие примеры на StackOverflow, форумах Embarcadero и Indy форуме .В следующий раз сделайте небольшое исследование, прежде чем задавать вопросы.

1 голос
/ 16 марта 2012

0MQ должно соответствовать вашим потребностям.0MQ реализует PGM многоадресную рассылку и разрешает запрос-ответ, публикацию-подписку, конвейер и эксклюзивную пару базовые шаблоны .К сожалению, у него нет текущей привязки Паскаля / Дельфи.Вы можете найти много (не паскаль) примеров в 0MQ guide

...