0

如何将数据数据发送给通过 websockets 连接的体面用户?我知道,Websocket 连接会产生上下文,但是我如何过滤一个像样的套接字连接,以便根据上下文(env)仅向 1 个(或一些)连接的用户发送数据?

SOCKETS = [] of HTTP::WebSocket
ws "/chat" do |socket,env|
  room = env.params.query["room"]
  SOCKETS << socket
  socket.on_message do |message|
    SOCKETS.each { |socket| socket.send message}
  end
  socket.on_close do
    SOCKETS.delete socket
  end
end

套接字必须包含房间还是需要 SOCKETS 才能成为哈希?

4

1 回答 1

0

您可以将套接字存储为哈希并将 id 提供给您的客户端,然后您可以发送最近客户端的已保存套接字。

我的意思是

SOCKETS = {} of String => HTTP::WebSocket

socket.on_message do |message|
  j = JSON.parse(message)
  case j["type"]
  when "login"
    user_id = j["id"].to_s
    SOCKETS[user_id] = socket
  when "whisper"
    to = j["to"].to_s
    from = j["from"]
    user = SOCKETS[to].send("#{from} is whispering you!")
end

类似的东西。

于 2017-07-03T22:26:58.587 回答