2012-04-18 104 views
3

我開始使用em-websocket gem開發基於網絡套接字的遊戲。em-websocket gem with Ruby on Rails

通過運行

$>紅寶石server.rb

測試我啓動服務器的應用程序,然後我只需打開兩個瀏覽器直接到HTML文件(沒有Web服務器),並開始播放。

但是現在我想添加一個Web服務器,一些數據庫表,以及其他基於Ruby on Rails的gem。

如何實現我的web-socket服務器和我的Ruby on Rails應用程序之間的通信?他們是否應該在同一臺服務器上運行並作爲單個進程運行?在不同的服務器上運行並通過AJAX進行通信?

我需要支持認證和其他功能,如提前更新數據庫,當遊戲結束後,等

感謝。

回答

3

這是交易。我也想用ruby on rails框架開發websocket服務器客戶端。然而,ruby-on-rails與eventmachine並不是很友好。我一直都有一個websocket客戶端,所以我設法從現有的lib中複製/剪切/粘貼,並最終得到以下兩個基本的東西。

EM-的WebSocket服務器

https://gist.github.com/ffaf2a8046b795d94ba0 

ROR友好的WebSocket客戶

https://gist.github.com/2416740 

在腳本目錄服務器代碼,開始像Ruby代碼如下。

# Spawn a new process and run the rake command 
    pid = Process.spawn("ruby", "web_socket_server.rb", 
     "--loglevel=debug", "--logfile=#{Rails.root}/log/websocket.log", 
     :chdir=>"#{Rails.root}/script") #, 
     :out => 'dev/null', :err => 'dev/null' 
    Process.detach pid # Detach the spawned process 

那麼你的客戶端可以使用這樣

ws = WebSocketClient.new("ws://127.0.0.1:8099/import") 
Thread.new() do 
    while data = ws.receive() 
    if data =~ /cancel/ 
     ws.send("Cancelling..") 
     exit 
    end 
    end 
end 
ws.close 

我希望有一個很好的ROR友好EM-的WebSocket客戶端,但不能罰款一個呢。

一旦你使服務器/客戶端運行良好,auth。並且數據庫支持不能與其他rails代碼大不相同。 (我指的是具有客戶端與一些認證/ DB限制)

3

我就可能不符合你當前使用情況有幫助的瑰寶工作。該寶石被稱爲websocket-rails,並且從頭開始設計使得使用Rails應用程序內的WebSockets變得簡單。它現在處於穩定版本。

請讓我知道,如果你覺得這有幫助或有任何想法可能會缺乏。