Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 用于websocket-rails gem的Ruby websocket客户端大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个rails网页,需要使用websocket功能与外部 ruby客户端进行通信.为了做到这一点,我在rails服务器中使用websocket-rails gem,定义client_connected client_disconnected事件以及从客户端接收消息的特定操作(new_messagE).

在客户端,我尝试使用不同的ruby宝石,如faye-websocket-ruby和websocket-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,:with_method => :new_message

  subscribe :client_disconnected,: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|
  p e
  exit 1
end

ws.on :error do |e|
  p e
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:如果您需要更多代码,请告诉我.

解决方法

最后我找到了解决方案.问题是消息需要用 certain format构造才能被websocket-rails理解.

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

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

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 用于websocket-rails gem的Ruby websocket客户端全部内容,希望文章能够帮你解决ruby-on-rails – 用于websocket-rails gem的Ruby websocket客户端所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。