2013-08-05 4 views
1

подход

Я строю асинхронный IM/чат-приложение с ZeroMQ, только в качестве учебного упражнения, используя следующий подход.Как реализовать асинхронную мгновенного обмена сообщениями чата с ZeroMQ

Сервер использует два маршрутизатора розетки, похожие на lbbroker.java, чтение из incoming и записи на outgoing, манипулируя конверт для доставки целевого приемника.

Клиенты устанавливают уникальный идентификатор с socket.setIdentity() и используют гнезда PULL и PUSH вместо REQ/REP для асинхронной отправки и приема сообщений чата. Я создал и протестировал код, все работает нормально.

Async Chat

Вопросы

  • Является ли использование PUSH/PULL с ROUTER обоснованный подход?

  • Почему чат-клиенты становятся недоступными при отмене, а затем повторно подключаются?

Салли становится недоступной, если она отключается, а затем снова соединяется, она больше не может получать сообщения чата. После отладки сервера я подтвердил, что он определенно отправляет сообщения с правильным конвертом в sally. Я также использовал outgoing.setRouterMandatory(true), чтобы обеспечить, чтобы сообщения без адреса не были отброшены сервером, но ошибки не были подняты.

ответ

2

После дальнейших исследований, в то время как разъемы PUSH и PULL работают с ROUTER, они не являются допустимыми комбинациями сокетов в соответствии с спецификацией ZeroMq.

Разъем DEALER на стороне клиента - лучший подход. DEALER поддерживает двунаправленную передачу сообщений, в основном выполняя работу PUSH и PULL, но с одним разъемом.

Я начал тему в Github, обсуждая проблему, она включает в себя некоторый пример кода для шаблона агента, использующего DEALER.

https://github.com/zeromq/jeromq/issues/81

 Смежные вопросы

  • Нет связанных вопросов^_^