gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:53:53 24 4
gpt4 key购买 nike

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

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

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

服务器端

应用程序/ Controller /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

配置/事件.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-client-simple
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

faye-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 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com