Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.JS通过Socket.IO发送错误数据_Javascript_Node.js_Socket.io - Fatal编程技术网

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

Javascript Node.JS通过Socket.IO发送错误数据,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我使用Node.JS和Socket.IO来交换数据。我有以下“模式”: “本地”Socket.IO服务器,设置间隔为10秒,在每次迭代中广播不同的数据 “global”Socket.IO服务器,根据HTML客户端的请求,从“local”服务器接收数据(以下代码中的ioLocal变量是Socket.IO客户端),使用通过HTML客户端请求传递的数字修改数据并发送到客户端 问题是HTML客户端接收到错误的数据。想象一下,对于时间戳,本地服务器广播消息“2”。同时,两个不同的HTML客户机请求数据

我使用Node.JS和Socket.IO来交换数据。我有以下“模式”:

  • “本地”Socket.IO服务器,设置间隔为10秒,在每次迭代中广播不同的数据
  • “global”Socket.IO服务器,根据HTML客户端的请求,从“local”服务器接收数据(以下代码中的ioLocal变量是Socket.IO客户端),使用通过HTML客户端请求传递的数字修改数据并发送到客户端
问题是HTML客户端接收到错误的数据。想象一下,对于时间戳,本地服务器广播消息“2”。同时,两个不同的HTML客户机请求数据,第一个用“2”,第二个用“3”。预期第一个接收“4”(2*2),第二个接收“6”(2*3),但不工作。 相反,第一个接收“4”,第二个接收“12”(4*3)。如果我有第三个客户端发送“2”,它将接收“24”(12*2)

我尝试为每个客户机创建一个不同的var,使用socket.set和socket.get,这是socket.id的数组,但这些解决方案都不起作用

这有什么问题?这是一个范围问题吗? 谢谢你抽出时间

“全局”服务器

“本地”服务器

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>

Socket.IO多客户端测试
var socket=io.connect('http://10.0.0.219:9090');
函数go(){
var message=document.getElementById('message')。值;
socket.emit('data\u rt',message);
};
socket.on('rsp\u data\u rt',函数(num){
document.getElementById('result')。innerHTML=num;
})
Socket.IO多客户端
消息:
发送 结果:
在对数据广播进行任何操作之前,您是否检查过您在数据广播中接收到的数字?您能否解释一下“全局”和“本地”socket.io服务器的必要性以及您所说的“全局”和“本地”socket.io服务器的含义。@AndreasHultgren在数据广播中,我收到了我在问题中所写的最后一次乘法运算。这就是问题所在。我认为var数据是“范围独立的”,然后我尝试将该变量设置为socket属性,但没有成功。而不是
data=data*num我尝试了
othervar=data*num
,但也没有成功@“全局”和“本地”是两个不同的socket.io服务器。我只称它们为“全局”和“本地”,因为一个是我的生产站点的“本地”,另一个在另一个位置……但如果是这样的话,问题就出在发送数据广播的函数中,而您还没有发布这些内容。@AndreasHultgren我已经用所有代码编辑了这个问题。
var ioLocal = require('socket.io').listen(9091);
ioLocal.sockets.emit('data_broadcast', 2);
<!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>