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