Node.JS通过Socket.IO发送错误的数据

我使用Node.JS和Socket.IO来交易数据。 我有以下“架构”:

  • 一个“本地”Socket.IO服务器,它具有10秒的setInterval,在每次迭代中广播不同的数据。
  • 一个“全局”的Socket.IO服务器,根据来自HTML客户端的请求,从“本地”服务器接收数据(以下代码中的ioLocalvariables是一个socket.io-客户端),用通过的数字修改数据HTML客户端请求并发送给客户端。

问题是HTML客户端收到错误的数据。 想象一下,对于时间戳,本地服务器广播消息“2”。 同时,两个不同的HTML客户端请求数据,第一个用“2”,第二个用“3”。 期望的是第一个接收“4”(2 * 2),第二个接收“6”(2 * 3),但是不工作。 相反,第一个接收“4”,第二个接收“12”(4 * 3)。 如果我有第三个客户端发送“2”,它会收到“24”(12 * 2)。

我试图为每个客户端创build一个不同的var,使用socket.set和socket.get,一个socket.id的数组,但是这些解决scheme都没有工作。

这有什么问题? 这是范围问题吗? 谢谢你的时间。

“全球”服务器

var ioGlobal = require('socket.io').listen(9090); ioGlobal.set('log level', 1); ioGlobal.enable('browser client minification'); // send minified client ioGlobal.enable('browser client etag'); // apply etag caching logic based on version number ioGlobal.enable('browser client gzip'); // gzip the file ioGlobal.set('transports', [ 'websocket', 'xhr-polling' ]); ioGlobal.set("polling duration", 10); ioGlobal.set('sync disconnect on unload', true); var ioLocal = require('socket.io-client').connect('http://10.0.0.219:9091', { 'connect timeout' : 1500, 'reconnect' : true, 'reconnection delay' : 500, 'max reconnection attempts' : 20 }); ioGlobal.sockets.on('connection', function(iSocket) { debug && console.log('Client '+iSocket.id+' connected.'); iSocket.on('disconnect', function() { debug && console.log("Client "+iSocket.id+" disconnected."); }); iSocket.on('data_rt', function(num) { ioLocal.on('data_broadcast', function(data) { //do something to data with num data = data*num; iSocket.emit('rsp_data_rt', data); }); }); }); 

“本地”服务器

 var ioLocal = require('socket.io').listen(9091); ioLocal.sockets.emit('data_broadcast', 2); 

HTML客户端

 <!DOCTYPE html5> <html> <head> <title>Socket.IO MultiClient Test</title> <script type="text/javascript" src="http://10.0.1.180:3000/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://10.0.0.219:9090'); function go(){ var message = document.getElementById('message').value; socket.emit('data_rt', message); }; socket.on('rsp_data_rt', function(num){ document.getElementById('result').innerHTML = num; }) </script> </head> <body> <h1>Socket.IO Multiclient</h1> Message: <input type="text" id="message"><br /> <button type="button" onclick='go()'>Send</button> Result: <span id="result"></span> </body> </html>