2010-10-20 115 views
0

我需要編寫一個Rails應用程序(JRuby),它在後臺與另一服務進行異步通信。每個瀏覽器會話需要一個連接。 (它並不需要是一個開放的TCP連接,但我需要在會話結束後釋放資源。)與後臺服務的通信不是嚴格的請求 - 響應。在任何時候都可以有一條消息從服務發送到Rails應用程序。rails異步通信和xhr輪詢

我也需要實現協議。我該怎麼做呢? Ruby on Rails是否有異步框架(例如Twisted或Node.js)?我只需要一些起點。

我已經在Python中編寫了一個客戶端協議的快速實現。實際上,完整的協議是由我組成的(服務器是用JavaScript編寫的),所以我可以完全改變協議。但是,由於問題的性質,異步性質不能改變。

另外我需要XHR輪詢/ WebSockets,以便將異步更改推送到瀏覽器。有沒有一個寶石/如何/教程?我不能只是將請求設置爲睡眠(資源!)。

如果您想了解更多關於背景的信息: Rails應用程序是一個輔助工具。它與之通信的服務實際上是一個加載和呈現網頁的Firefox加載項。異步特性來自(i)框架,彈出窗口(window.open(),window.alert(),...),必須傳遞給Rails應用程序的DOM樹的動態更改,重定向(就像在論壇中擺姿勢之後)等。需要使用JRuby,因爲我需要使用Jena(Java)框架進行RDF處理。

回答

0

Ruby On Rails也是一個異步框架。使用瘦服務器。 Node.js或Twisted不是Asynchrone框架。只有Event框架。

在Ruby中,事件框架是EventMachine和瘦服務器使用它。您可以使用rack :: middleware創建一些websocket並使用它。

0

看看Juggernaut 2,它確實是這樣的(它也使用節點)。我使用它將消息從我的服務器推送到所有連接的客戶端,並且效果很好。實現是一件輕而易舉的事情(儘管自述文件在某些​​事情上有點不清楚),讓我知道你是否需要任何幫助。

+0

看起來這可能是我需要的。謝謝。 – panzi 2010-12-08 13:03:49