Можно ли реализовать двустороннюю связь между клиентом и сервером с помощью Apache Thrift? При этом не только уметь делать RPC от клиента к серверу, но и наоборот? В моем проекте у меня есть требование, чтобы сервер также передал некоторые данные клиенту без запроса клиента, прежде чем сделать это.
Использовать Apache Thrift для двусторонней связи?
Ответы (2)
Есть два способа добиться этого с помощью Thrift.
Если оба конца являются более или менее одноранговыми, и вы соединяете их через сокеты или каналы, вы просто настраиваете сервер и клиент на обоих концах, и все готово. Однако это работает не во всех случаях, особенно с HTTP.
Если вы соединяете сервер и клиент через HTTP или аналогичный канал, существует метод, называемый events-sse-and-comet">долгий опрос". По сути, это требует, чтобы клиент вызывал сервер, как обычно, но вызов вернется только тогда, когда сервер захочет отправить некоторые данные обратно клиенту. После получения данных клиент начинает еще один вызов, если ему все еще нужны дополнительные данные.
Как указал Денис, в зависимости от вашего конкретного варианта использования вы можете рассмотреть возможность использования системы MQ. Обратите внимание, что по-прежнему можно использовать Thrift для десериализации сообщений в очереди и из нее. В папке contrib есть несколько примеров, показывающих, как использовать Thrift с ZMQ, Rebus и некоторые другие.
Тогда вам лучше использовать очереди, например. ZeroMQ.