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