【问题标题】:Communication delay in HTML5 websocket with nodejsHTML5 websocket与nodejs的通信延迟
【发布时间】:2012-10-21 23:52:26
【问题描述】:

大家好,感谢您阅读本文。 我在服务器端使用带有 WS 模块的 NodeJS,在客户端在 Firefox 中使用 HTML5 WebSocket API。操作系统是windows 7 64位。每当我建立从客户端到服务器的连接时,连接都会立即形成,但是当我发送一些数据时会有很大的延迟。有时消息似乎会立即到达服务器,有时它们会在几秒钟甚至几分钟后到达,而大多数时候它们根本无法到达服务器。我正在从客户端和服务器端附加代码。如果有人可以帮助我,我将非常感激。

客户端代码

<!doctype html>
<html>
    <head>
        <script>
            var ws = new WebSocket("ws://localhost:5225");
            ws.onopen = function (){
                alert("Sending");
                ws.send("SOME DATA !");
            }
        </script>
    </head>
    <body>
    </body>
</html>

服务器端代码

var WebSocketServer = require('./ws').Server;
var wss = new WebSocketServer({port:5225});
var ws;

wss.on('connection',function (wsock){
    console.log("Connection Recieved");

    ws = wsock;

    ws.on('message',onnMessage);

    ws.on('close',onnClose);
});

function onnMessage(data){
        console.log("Data Recieved : "+data);
}

function onnClose(){
        console.log("Connection closed");
}

【问题讨论】:

  • 你试过用 127.0.0.1,我建议用谷歌浏览器测试。它的 Devtools(ctrl+shift+j) 已集成到浏览器中,因此比 firefox+firebug 更可靠。我还建议将 websock 客户端代码包装在 window.onload = function(){} 中;截至目前,您的代码在 DOM 准备好之前执行
  • 我还建议从 websocket 构造函数之前删除var 。您的问题可能是在 onopen 事件触发之前 var 超出范围(并被垃圾收集)。
  • 谢谢大家的回答。我最初的嫌疑人也是垃圾收集器,但我已经采取了所有预防措施,现在我认为这不是导致问题的原因。我还没有解决这个问题,但我认为它不是由我的客户端和服务器代码引起的。这可能是因为 node.js 是在 windows 环境中从命令提示符运行的。

标签: javascript html node.js websocket


【解决方案1】:

我目前无法测试,但我认为问题在于您的 websocket 变量(ws)超出了.onopen() 事件的范围,或者在事件触发之前垃圾收集器正在释放该变量.要解决此问题,请将套接字创建为全局(或全局范围内的对象):

<script>
    window.ws = new WebSocket("ws://localhost:5225");
    ws.onopen = function (){
        alert("Sending");
        ws.send("SOME DATA !");
    }
</script>

【讨论】:

    【解决方案2】:

    要访问onopen 处理程序中的ws 对象,请使用this 引用,如下所示:

            ws.onopen = function (){
                alert("Sending");
                this.send("SOME DATA !");
            }
    

    【讨论】:

      【解决方案3】:

      ws example

      我举了一个例子。 它只处理文本,文本大小限制为 64k。

      基本上,ws 不是一个简单的套接字。服务端需要按照ws协议解析数据。

      【讨论】:

        猜你喜欢
        • 2016-03-16
        • 2021-02-12
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2013-06-11
        • 2017-11-13
        • 1970-01-01
        相关资源
        最近更新 更多