带有nodejs的HTML5 websocket中的通信延迟

时间:2012-10-21 12:14:56

标签: javascript html5 node.js websocket

大家好,感谢您阅读本文。 我在服务器端使用带有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");
}

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

ws example

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

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