3

私は 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たが、彼らはそこのプロジェクトからルーターを削除したようです...

4

0 に答える 0