Двунаправленная связь JSON-RPC в реальном времени по HTTP - PullRequest
6 голосов
/ 28 января 2011

Я создаю сервер JSON-RPC, который принимает запросы по HTTP. Я хотел бы поддержать двунаправленную связь (и клиент, и сервер могут отправлять запросы), конкретный вариант использования - архитектура публикации / подписки, где клиент отправляет запрос subscribe(X) и получает changed(X) запросов в (почти) реальных время. Насколько я знаю, есть несколько способов реализовать это с помощью HTTP:

  • длинный опрос
  • WebSockets
  • опрос вызовов с использованием модели сеанса на основе файлов cookie
  • потоковая передача (при открытом HTTP-соединении)
  • комбинация некоторых из вышеперечисленных

То, что я ищу, - это решение, основанное на общепринятых интернет-стандартах (если это возможно), которое можно использовать из веб-браузера и , с которым легко работать на стороне клиента. Пока что я предпочитаю потоковую передачу (Twitter, CouchDB делают это таким образом), но я не уверен, насколько хорошо это поддерживается в браузерах и библиотеках JSON-RPC. Кроме того, могут быть другие способы сделать это, о которых я не знаю.

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 28 января 2011

Я думаю, вы должны взглянуть на socket.io , чтобы выполнить свою задачу. Вы могли бы, если бы хотели посмотреть это видео от автора: " Socket.IO Workshop: Guillermo Rauch ". На обоих серверах легко работать в качестве клиента. Я создал простой пример pubsub, используя redis поверх socket.io .

3 голосов
/ 28 января 2011

Насколько мне известно, потоковая передача поддерживается FF, Chrome (имеет проблемы с буферизацией, для работы которых требуется тип данных application / octet-stream или прелюдия) и IE8 (через небольшой XDomainRequest). Я не знаю об опере.

Я действительно не знаю каких-либо стандартов кометной индустрии, Bayeux , вероятно, самый близкий. Трудно понять, как это делают facebook / gmail / twitter, поскольку весь код запутан, и чрезвычайно сложно найти много информации о том, как все браузеры обрабатывают все.

Еще сложнее то, что вам нужно будет использовать специализированный сервер, для того, чтобы такое количество открытых соединений было открытым, потребуется пул потоков и т. Д. Обычный сервер будет работать довольно быстро.

Это очень мощный дизайн, если вы можете заставить его работать надежно.

1 голос
/ 19 февраля 2011

Если кого-то интересует реализация Java, я просто написал пример приложения и пост в блоге об этом. Он использует Java, Maven, Comet, Bayeux, Spring. http://jaye.felipera.cloudbees.net/ http://geeks.aretotally.in/thinking-in-reverse-not-taking-orders-from-yo

0 голосов
/ 16 июня 2019

Вам следует взглянуть на JSONRPC-двунаправленный . Он поддерживает двунаправленный RPC через WebSocket, Worker, WebRTC и HTTP и обладает широкими возможностями расширения.

...