1

我编写了一个程序,用于使用 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 页面发送的任何数据。现在,我需要跟踪与该服务器的连接并将收到的消息发送到所有可用的连接。这里使用的“发送”功能只能发送到指定的连接。

4

2 回答 2

0

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

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

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

于 2013-10-22T06:30:57.123 回答
0

你要一个基本的聊天服务器吗?

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

总帐

$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
于 2014-11-26T05:35:28.287 回答