通过 websocket 使用 Kemal 将数据发送给体面的用户
Send data to a decent user with Kemal over websocket
如何将数据数据发送给通过 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
socket必须包含空间还是需要SOCKETS作为Hash?
您可以将套接字存储为散列并将 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
类似的东西。
如何将数据数据发送给通过 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
socket必须包含空间还是需要SOCKETS作为Hash?
您可以将套接字存储为散列并将 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
类似的东西。