2012-04-18 150 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变得简单。它现在处于稳定版本。

请让我知道,如果你觉得这有帮助或有任何想法可能会缺乏。