私は Web ソケットを使用するのにかなり慣れていませんが、これまでやってきたことを楽しんでいます。
私のアプリは現在、接続が最初に確立されたパスに基づいて 3 つのエンドポイントでセットアップされています。
エンドポイント #1 - ユーザーは接続でき、メッセージの受信のみが可能になります。
エンドポイント#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 の処理を担当するクラスの 1 つを次に示します。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
たが、彼らはそこのプロジェクトからルーターを削除したようです...