Подход
Я создаю асинхронное приложение для обмена мгновенными сообщениями/чата с помощью ZeroMq в качестве учебного упражнения, используя следующий подход.
Сервер использует два сокета ROUTER, подобные lbbroker.java
, читая из incoming
и записывая в outgoing
, манипулируя конвертом для доставки предполагаемому получателю.
Клиенты устанавливают уникальный идентификатор с помощью socket.setIdentity()
и используют сокеты PULL и PUSH вместо REQ/REP для асинхронной отправки и получения сообщений чата. Я построил и протестировал код, все работает нормально.
Вопросы
Является ли использование PUSH/PULL с ROUTER допустимым подходом?
Почему чат-клиенты становятся недоступными при отключении, а затем повторном подключении?
Салли становится недоступной, если она отключается, а затем снова подключается, она больше не может получать сообщения чата. После отладки сервера я подтвердил, что он определенно отправляет Салли сообщения с правильным конвертом. Я также использовал outgoing.setRouterMandatory(true)
, чтобы сервер не отбрасывал неадресуемые сообщения, но никаких ошибок не возникало.