用于websocket-rails gem的Ruby websocket客户端

我正在开发一个rails网页,需要使用websocketfunction与外部ruby客户端进行通信。 为了做到这一点,我在rails服务器中使用websocket-rails gem,定义client_connected client_disconnected事件以及从客户端接收消息的特定操作(new_message)。

在客户端,我尝试使用不同的rubygem,如faye-websocket-rubywebsocket-client-simple,但在尝试发送消息时总是会出错。 在服务器上,我找不到处理这些消息的方法。 两个gems都有一个send方法,只接受一个字符串(不能指定事件的名称)

我一直在使用的代码如下:

服务器端

应用程序/控制器/ chat_controller.rb

class ChatController < WebsocketRails::BaseController def new_message puts ')'*40 end def client_connected puts '-'*40 end def client_disconnected puts '&'*40 end end 

配置/ events.rb

 WebsocketRails::EventMap.describe do subscribe :client_connected, :to => ChatController, :with_method => :client_connected subscribe :message, :to => ChatController, :with_method => :new_message subscribe :client_disconnected, :to => ChatController, :with_method => :client_disconnected end 

配置/初始化/ websocket_rails.rb

 WebsocketRails.setup do |config| config.log_path = "#{Rails.root}/log/websocket_rails.log" config.log_internal_events = true config.synchronize = false end 

客户端

WebSocket的客户端,简单

 require 'rubygems' require 'websocket-client-simple' ws = WebSocket::Client::Simple.connect 'ws://localhost:3000/websocket' ws.on :message do |msg| puts msg.data end ws.on :new_message do hash = { channel: 'example' } ws.send hash end ws.on :close do |e| pe exit 1 end ws.on :error do |e| pe end hash = { channel: 'Example', message: 'Example' } ws.send 'new_message', hash loop do ws.send STDIN.gets.strip end 

王菲-的WebSocket

 require 'faye/websocket' require 'eventmachine' EM.run { ws = Faye::WebSocket::Client.new('ws://localhost:3000/websocket') ws.on :open do |event| p [:open] end ws.on :message do |event| p [:message, event.data] end ws.on :close do |event| p [:close, event.code, event.reason] ws = nil end ws.send( 'Example Text' ) } 

提前致谢。 问候。

PD:如果您需要更多代码,请告诉我。

最后我找到了解决方案。 问题是消息需要用某种格式构造才能被websocket-rails理解。

示例: ws.send('[“new_message”,{“data”:“示例消息”}]’)

其中new_message是websocket-rails正在侦听的事件。