为什么这个WebSocket函数返回太多消息?

时间:2015-01-26 22:01:13

标签: javascript ruby websocket sinatra

我在后端使用Ruby gems sinatrasinatra-websocket,在前端使用JS。

我的后端:

get '/' do 
    if(!(request.websocket?))
        erb :index
    else 
        request.websocket do |ws|
            ws.onopen do
                settings.sockets << ws 
            end

            ws.onmessage do |msg|
                EM.next_tick {
                    settings.sockets.each{|s|
                        # p s
                        s.send(msg)
                    }
                }
            end

            ws.onclose do
                warn("connection closed")
            end
        end
    end
end

在前端......

window.onload = function(){
    function someFunction(){
        var ws = new WebSocket('ws://'+window.location.host+window.location.pathname);
        ws.onopen = function(){
            var buttons = document.getElementsByClassName('buttons');
            [].forEach.call(
                buttons,
                function(btn){
                    if(btn!=null){
                        btn.onclick = function(){
                            var amt = 11;
                            ws.send(amt);
                            console.log(amt);
                            return false;
                        };
                    }
                }
            );
        };
        ws.onmessage = function(msg){
            console.log(msg);
            return false;
        };

        ws.onclose = function(){
            console.log("Connection closed");
            return false;
        };
    }
};

第一个console.log()打印test一次,但onmessage中的一个首先给出响应两次,第二次点击buttons之一时的三次,每次我点击后都会多次。

这是为什么?如何使onmessage中的函数每次点击msg之一时{1}}只给我一次?

0 个答案:

没有答案