Javascript HTML5 websocket与nodejs的通信延迟

Javascript HTML5 websocket与nodejs的通信延迟,javascript,html,node.js,websocket,Javascript,Html,Node.js,Websocket,大家好,谢谢大家阅读。 我在服务器端使用NodeJS和WS模块,在客户端使用Firefox中的html5websocketapi。操作系统为64位windows 7。每当我建立从客户端到服务器的连接时,连接会立即形成,但当我发送一些数据时,会有巨大的延迟。有时,消息似乎会立即到达服务器,而有时,消息会在几秒钟甚至几分钟后到达服务器,大多数情况下,消息根本无法到达服务器。我正在从客户端和服务器端附加代码。如果有人能帮助我,我会非常感激 客户端代码 <!doctype html> <

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

客户端代码

<!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");
}

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


window.ws=newwebsocket(“ws://localhost:5225”);
ws.onopen=函数(){
警报(“发送”);
发送(“一些数据!”);
}

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

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

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


基本上,ws不是一个简单的套接字。您需要遵循ws-protocal来解析服务器端的数据。

您是否尝试过127.0.0.1,我建议您使用Google Chrome进行测试。它的Devtools(ctrl+shift+j)集成到浏览器中,所以说firefox+firebug更可靠。我还建议将websock客户端代码包装到
window.onload=function(){}
;到目前为止,您的代码是在DOM就绪之前执行的。我还建议从websocket构造函数之前删除
var
。您的问题可能是,在onopen事件触发之前,var已超出范围(并已收集垃圾)。谢谢大家的回答。我最初的嫌疑犯也是垃圾收集器,但我已经采取了所有的预防措施,现在我不认为这是造成问题的原因。我还没有解决这个问题,但我不认为它是由我的客户端和服务器代码引起的。这可能是因为node.js是在windows环境中从命令提示符运行的。
        ws.onopen = function (){
            alert("Sending");
            this.send("SOME DATA !");
        }