Использовать Apache Thrift для двусторонней связи?

Можно ли реализовать двустороннюю связь между клиентом и сервером с помощью Apache Thrift? При этом не только уметь делать RPC от клиента к серверу, но и наоборот? В моем проекте у меня есть требование, чтобы сервер также передал некоторые данные клиенту без запроса клиента, прежде чем сделать это.


person Thomas W.    schedule 26.02.2015    source источник


Ответы (2)


Есть два способа добиться этого с помощью Thrift.

  1. Если оба конца являются более или менее одноранговыми, и вы соединяете их через сокеты или каналы, вы просто настраиваете сервер и клиент на обоих концах, и все готово. Однако это работает не во всех случаях, особенно с HTTP.

  2. Если вы соединяете сервер и клиент через HTTP или аналогичный канал, существует метод, называемый events-sse-and-comet">долгий опрос". По сути, это требует, чтобы клиент вызывал сервер, как обычно, но вызов вернется только тогда, когда сервер захочет отправить некоторые данные обратно клиенту. После получения данных клиент начинает еще один вызов, если ему все еще нужны дополнительные данные.

Как указал Денис, в зависимости от вашего конкретного варианта использования вы можете рассмотреть возможность использования системы MQ. Обратите внимание, что по-прежнему можно использовать Thrift для десериализации сообщений в очереди и из нее. В папке contrib есть несколько примеров, показывающих, как использовать Thrift с ZMQ, Rebus и некоторые другие.

person JensG    schedule 26.02.2015

Тогда вам лучше использовать очереди, например. ZeroMQ.

person Denis Kulagin    schedule 26.02.2015
comment
Я не уверен, что это а) отвечает на вопрос и б) соответствует варианту использования, о котором ОП не рассказал нам достаточно подробно. Предполагая, что вы можете установить соединение ZMQ (которое, кстати, даже не является настоящей системой MQ), предполагается наличие некоторых вещей, о которых мы еще не знаем. - person JensG; 26.02.2015