3

我对使用 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,但他们似乎已经从那里的项目中删除了路由器......

4

0 回答 0