使用事件计算机 WebSocket 广播数据



我编写了一个程序,用于使用 websocket 将数据从 html 文件读取到 ruby 程序。我包含以下代码:

EventMachine::WebSocket.run(:host => "0.0.0.0", :port => 8080) do |ws|
      ws.onopen { |handshake|
      puts "WebSocket connection open #{ws}"
     # Access properties on the EM::WebSocket::Handshake object, e.g.
     # path, query_string, origin, headers
     # Publish message to the client
     # ws.send "Hello Client, you connected to #{handshake.path}"
    }

    ws.onclose { puts "Connection closed" }
    ws.onmessage { |msg|
         puts "Recieved message: #{msg}"
         ws.send "#{msg}"
    }
end

这工作正常。它接收从我的 html 页面发送的任何数据。现在,我需要的是跟踪与此服务器的连接,并将收到的消息发送到所有可用连接。这里使用的"发送"功能只能发送到指定的连接。

您需要基本的聊天服务器?

只需将连接存储在列表(或哈希)中即可。人们倾向于包含在哈希中,以便更容易删除它们如果这是在类中,请使用 @connections 而不是$connections

GL

$connections = {}
EventMachine::WebSocket.run(:host => "0.0.0.0", :port => 8080) do |ws|
  ws.onopen
    $connections[ws] = true
  end
  ws.onclose do
    $connections.delete(ws)
  end
  ws.onmessage do |msg|
    $connections.each { |c, b| c.send msg }
  end
end

您可以将 EventMachine 与 Faye 和 Faye/Websocket 结合使用

您将需要 faye/websocket 用于基于浏览器的客户端,或者只需要 faye 用于您的 ruby 客户端。

这个想法是,通过Faye创建一个频道,然后为您的客户订阅该频道。然后,您将所需的数据从服务器推送到此通道,订阅的客户端将收到此数据。

相关内容

  • 没有找到相关文章

最新更新