【问题标题】:Firefox Websocket double connectionFirefox Websocket 双连接
【发布时间】:2012-10-19 04:17:40
【问题描述】:

背景:编写 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 上看到一个单一连接,并调用适当的握手和操作。在 Firefox 上,您同时有两个连接,一个握手并执行操作(这在浏览器上执行了预期的操作),但第二个连接在 5 秒后被踢出。这只是Firefox的事情吗?我没有在 Firebug 中显示两个连接,只是一个连接。如果它只是一个 Firefox 的东西,我可以忍受它,因为确实会发送和接收正确的数据,但如果是这种情况,我会皱起眉头。

【问题讨论】:

    标签: javascript html firefox websocket


    【解决方案1】:

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

    在 Firefox 16 中已修复。

    【讨论】:

    • 嗯,你是对的。我什至没有意识到我没有运行最新版本。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 2012-09-09
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2014-07-09
    相关资源
    最近更新 更多