Мне нужно написать приложение 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.