使用sinatra websocket在不同渠道发送消息



有没有一种方法可以使用sinatra-websocket-gem在不同的通道上发送消息?

基本上,我试图用新浪微博取代Pusher。以下是我对Pusher:所做的操作

Pusher["my_channel_A"].trigger('some_event_type', my_message)
Pusher["my_channel_B"].trigger('another_event_type', my_message)

这个sinatra-websocket片段中的语法等价物是什么?

request.websocket do |ws|
  ws.onopen do
    ws.send("Hello World!")
    settings.sockets << ws
  end
  ws.onmessage do |msg|
    EM.next_tick { settings.sockets.each{|s| s.send(msg) } }
  end
  ws.onclose do
    warn("websocket closed")
    settings.sockets.delete(ws)
  end
end 

在这里找到了答案:

get '/socket/live/game/:id' do 
    if !request.websocket?
        puts "Not a websocket request"
    else
        request.websocket do |ws|
            channel = params[:id]
            @con = {channel: channel, socket: ws}
            ws.onopen do
                ws.send("Hello World!")
                settings.sockets << @con
            end
            ws.onmessage do |msg|
                return_array = []
                settings.sockets.each do |hash|
                    #puts hash
                    #puts hash['channel']
                    if hash[:channel] == channel
                        #puts hash[:socket]
                        return_array << hash
                        puts "Same channel"
                        puts return_array
                    else
                        puts hash[:channel]
                        puts channel
                        puts "Not in same channel"
                    end
                end
                EM.next_tick { return_array.each{|s| s[:socket].send(msg) } }
            end
            ws.onclose do
                warn("websocket closed")
                settings.sockets.each do |hash|
                    if hash[:socket] == ws
                        settings.sockets.delete(hash)
                        puts "deleted"
                    else
                        puts "not deleted"
                    end
                end
            end
        end
    end
end

它仍然很冗长。我猜Pusher通过他们的API抽象掉了所有这些。

相关内容

  • 没有找到相关文章

最新更新