如何在后台进程中使用 Ruby 将数据发送到 WebSocket?
背景
我已经有一个使用websocket-eventmachine-server
gem 运行 Websocket 服务器的单独 ruby 文件。但是,在我的 Rails 应用程序中,我想在后台任务中将数据发送到 websocket。
这是我的 WebSocket 服务器:
EM.run do
trap('TERM') { stop }
trap('INT') { stop }
WebSocket::EventMachine::Server.start(host: options[:host], port: options[:port]) do |ws|
ws.onopen do
puts 'Client connected'
end
ws.onmessage do |msg, type|
ws.send msg, type: type
end
ws.onclose do
puts 'Client disconnected'
end
end
def stop
puts 'Terminating WebSocket Server'
EventMachine.stop
end
end
但是,在我的后台进程中(我正在使用 Sidekiq),我不确定如何连接到 WebSocket 并向其发送数据。
这是我的 Sidekiq 工人:
class MyWorker
include Sidekiq::Worker
def perform(command)
100.times do |i|
# Send 'I am on #{i}' to the Websocket
end
end
end
我希望能够做类似的事情,EventMachine::WebSocket.send 'My message!'
但我没有看到 API 或类似的东西。在 Ruby 中将数据发送到 WebSocket 的正确方法是什么?