1

背景:写一个websocket。在 Chrome 中运行良好。单连接。在 Firefox 中工作正常,但它建立了两个连接,我不知道为什么。相同的 javascript,相同的网页,相同的套接字服务器。

客户端JS:

var ws;
doWebSocketSetup();
function doWebSocketSetup(){
    console.log('Connecting...');
    ws=new WebSocket('ws://mysocketserver.com:9300/demo');

    ws.onopen=function(){
        console.log('Connected!')
        socketSend('connect',sessionStorage.user);
        if(!sessionStorage.announce){
            socketSend('login',sessionStorage.user);
            sessionStorage.announce=true;
        }
        socketSend('view',window.location.href);
        setTimeout(function(){
            processQueue();
        },100);
    }
    ws.onmessage=function(e){
        if(e.data!='ok'){
            $.msg(e.data,{header:'Server Message',live:10000});
            console.log('Server: '+e.data);
        }
        processQueue();
    }
    ws.onclose=function(){
        console.log('Disconnected');
    }
}
var sendQueue=new Array();
function socketSend(action,data){
        var payload = new Object()
        payload.action = action
        payload.client = sessionStorage.user
        payload.data = data
        sendQueue.unshift(payload);
}
function processQueue(){
    if(sendQueue.length==0)
        return;
    var payload=sendQueue.pop()
    console.log('Sending: '+JSON.stringify(payload));
    ws.send(JSON.stringify(payload))
}

现在 Firefox 上的服务器控制台输出:

2012-10-18 20:58:53 [info] [client 68.99.226.57:53079] Connected 94e568176299729fa8669c512fdb107d 
2012-10-18 20:58:53 [info] [client 68.99.226.57:53080] Connected 457eb971eabaeba6b6afd637755ce53c 
2012-10-18 20:58:53 [info] [client 68.99.226.57:53080] Performing handshake 
2012-10-18 20:58:53 [info] [client 68.99.226.57:53080] Handshake sent 
2012-10-18 20:58:54 [info] [client 68.99.226.57:53080] _actionConnect 
2012-10-18 20:58:54 [info] [client 68.99.226.57:53080] _actionView 
2012-10-18 20:58:58 [info] [client 68.99.226.57:53079] Disconnected - 94e5681762 99729fa8669c512fdb107d

在 Chrome 上:

2012-10-18 21:09:17 [info] [client 68.99.226.57:53161] Connected 3906f16fa4037cbb08a8a5d1d6094cea
2012-10-18 21:09:17 [info] [client 68.99.226.57:53161] Performing handshake
2012-10-18 21:09:17 [info] [client 68.99.226.57:53161] Handshake sent
2012-10-18 21:09:17 [info] [client 68.99.226.57:53161] _actionConnect
2012-10-18 21:09:17 [info] [client 68.99.226.57:53161] _actionView

您会在 Chrome 上看到 SINGLE 连接,并调用适当的握手和操作。在 Firefox 上,您同时有两个连接,一个握手并执行操作(这会在浏览器上执行预期的操作),但第二个连接在 5 秒后被踢出。这只是Firefox的事情吗?我没有在 Firebug 中显示两个连接,只是一个连接。如果它只是一个 Firefox 的东西,我可以忍受它,因为确实会发送和接收正确的数据,但如果是这种情况,我会对他们皱眉头。

4

1 回答 1

2

这是Firefox 15中的一个错误,它创建了一个它从不使用的推测连接(实际上不能,因为它是 WebSocket 连接而不是 HTTP 连接)。

它已在 Firefox 16 中修复。

于 2012-10-19T04:43:14.393 回答