2013-11-26 3 views
2

У меня есть странное Szenario:ZeroMQ REQ/REP наоборот

Вебсервер/Appserver (Java) посылает запросы на множество различных спутниковых систем (на клиентов сайта). Только спутниковые системы могут инициировать соединение из-за правил брандмауэра.

Модель, я думаю, должна быть чем-то вроде REQ/REP, , но здесь REQuester должен связываться, и REPLYer должен будет подключиться.

Возможно ли это и стабильная архитектура?

Есть ли лучшие решения? (У нас сначала были WebSockets ...)

Примечание: нам не нужно использовать Java на обоих концах. Если быть точным на сайте клиентов, у нас есть Delphi, но мы могли бы как-то его скрестить.

ответ

2

модель я думаю, должно быть что-то вроде REQ/REP, но здесь REQUESTER должны связывать и REPlyer бы подключиться.

Это будет проблематично. Когда сервер инициирует соединение, он должен знать обо всех одноранговых узлах и их адресе привязки. Не очень много для нескольких сверстников, но для многих людей, постоянно меняющихся, это беспорядок.

Только спутниковые системы могут инициировать соединение из-за правил брандмауэра.

Если это так, ваш пробег будет отличаться в зависимости от WebSockets; google вокруг, много информации об этом.

Есть ли лучшие решения?

Ну, с ZeroMQ, одно решение, которое приходит на ум, чтобы поддержать инициирование запроса клиента заключается в следующем:

  • сервер связывается с ROUTER
  • Клиенты соединяются с DEALER.

Этот подход предлагает двунаправленный запрос/ответ, не блокирует (асинхронно) и устраняет проблему связывания на стороне клиента, упомянутую в вашем вопросе. Здесь сервер связывается, и обе стороны могут инициировать разговор.

Я рекомендую прочитать этот section в руководстве, он охватывает расширенный асинхронный запрос/ответ и обертывание сообщений, что важно при использовании разъемов ROUTER/DEALER.

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