1

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

3 回答 3

0

例子

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

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

于 2012-10-21T15:52:26.610 回答
0

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

        ws.onopen = function (){
            alert("Sending");
            this.send("SOME DATA !");
        }
于 2012-10-21T13:27:21.660 回答
0

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

<script>
    window.ws = new WebSocket("ws://localhost:5225");
    ws.onopen = function (){
        alert("Sending");
        ws.send("SOME DATA !");
    }
</script>
于 2012-10-21T12:38:49.370 回答