我对使用 web sockets 还是很陌生,但我很享受到目前为止所做的一切。
我的应用程序当前根据最初建立连接的路径设置了 3 个端点。
端点 #1 - 用户可以连接并且只能接收消息。
EndPoint #2 - 可以将消息发送给特定用户。
EndPoint #3 - 返回哪些用户已连接以及每个用户有多少连接的状态。
我找不到任何可以说明我正在尝试做的事情(路由)的好的教程或示例。这让我觉得我可能不正确地处理这个问题。但是,我的应用程序似乎一切正常。
这是我的路由器的示例:router.rb
class Router
def setup
@@connections ||= {}
@@sockets ||= {}
@response_servers = {
"connect" => ConnectionPool.new,
"status" => StatusServer.new,
"message" => MessageServer.new
}
end
def onopen(socket, handshake)
@@connections[socket] = handshake
get_response_server(socket).onopen(socket)
end
def onmessage(socket, message)
get_response_server(socket).onmessage(socket, message)
end
def onclose(socket)
get_response_server(socket).onclose(socket)
end
def get_response_server(socket)
uri = URI(@@connections[socket].path)
case uri.path
when "/status"
return @response_servers["status"]
when "/send_message"
return @response_servers["message"]
when "/"
return @response_servers["connect"]
end
end
end
这是负责处理状态 EndPoint #3 的类之一:status_server.rb
class StatusServer < Router
def onopen(socket)
puts "StatusServer onopen"
end
def onmessage(socket, message)
puts "StatusServer onmessage => Recieved message: #{message}"
socket.send get_connected_users.to_s
end
def onclose(socket)
puts "StatusServer onclose"
end
def get_connected_users
connected_users = {}
@@sockets.each do |key, value|
if value.count > 0 then
connected_users[key] = value.count
end
end
connected_users
end
end
我是否以正确/建议的方式解决这个问题?我正在做任何不安全的事情——就异步而言?
我也调查过Goliath
,但他们似乎已经从那里的项目中删除了路由器......