рельсы асинхронной связи и опрос xhr - PullRequest
0 голосов
/ 20 октября 2010

Мне нужно написать приложение Rails (JRuby), которое выполняет асинхронную связь с другим сервисом в фоновом режиме.Для каждого сеанса браузера должно быть установлено одно соединение.(Это не обязательно должно быть открытое TCP-соединение, но мне нужно освободить ресурсы после окончания сеанса.) Связь с фоновой службой не является строгим запросом-ответом.В любое время может быть послано сообщение от службы в приложение rails.

Мне также нужно реализовать протокол.Как мне это сделать?Существует ли асинхронная структура (например, Twisted или Node.js) для Ruby on Rails?Мне просто нужны некоторые отправные точки.

Я уже написал быструю реализацию протокола на стороне клиента в Python.На самом деле полный протокол составлен мной (сервер написан на JavaScript), поэтому я мог полностью изменить протокол.Тем не менее, асинхронный характер не может быть изменен из-за характера проблемы.

Также мне нужны опросы XHR / WebSockets для отправки асинхронных изменений в браузер.Есть ли что-нибудь для этого?Я не могу просто перевести запрос в спящий режим (ресурсы!).

На случай, если вы хотите узнать больше об истории вопроса: приложение Rails - это инструмент специальных возможностей.Сервис, с которым он взаимодействует, на самом деле является надстройкой Firefox, которая загружает и отображает веб-страницы.Асинхронный характер происходит от (i) фреймов, всплывающих окон (window.open(), window.alert(), ...), динамических изменений в дереве DOM, которые должны быть переданы в приложение Rails, перенаправлений (как после представления на форуме) и т. д. Мне нужно использовать JRuby, потому что мне нужно использовать инфраструктуру Jena (Java) для обработки RDF.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Посмотрите на Джаггернаут 2 , он делает именно это (и он также использует узел). Я использую его для отправки сообщений со своего сервера на все подключенные клиенты, и это прекрасно работает. Реализация была быстрой (хотя readme немного неясен для некоторых вещей), позвольте мне знать, если вам нужна помощь с этим.

0 голосов
/ 20 октября 2010

Ruby On Rails также является асинхронной средой. с тонким сервером. Node.js или Twisted не являются фреймворком Asynchrone. Там просто Event Framework.

В ruby ​​Event Framework - это EventMachine, и тонкий сервер использует его. Вы можете создать веб-сокет с помощью rack :: middleware и использовать его.

...