node.js+;socket.io-重复websocket写入?

node.js+;socket.io-重复websocket写入?,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,我不熟悉node.js和socket.io场景,所以这可能是一个简单的修复。。。但事情是这样的。我有以下POC,用于通过UDP接收消息并将其回显到浏览器。在55555上接收UDP消息,执行websocket写入,客户端在浏览器中看到数据。然而,当另一个客户端连接到服务器时,当接收到一个数据报时,会执行四次websocket写入—我相信每个客户端两次,因为附加的数据现在显示两次。启动第三个客户机显示六个websocket写入-附加数据现在显示三次 你知道这是什么原因吗?愚蠢的错误?曲解?臭虫 服务

我不熟悉node.js和socket.io场景,所以这可能是一个简单的修复。。。但事情是这样的。我有以下POC,用于通过UDP接收消息并将其回显到浏览器。在55555上接收UDP消息,执行websocket写入,客户端在浏览器中看到数据。然而,当另一个客户端连接到服务器时,当接收到一个数据报时,会执行四次websocket写入—我相信每个客户端两次,因为附加的数据现在显示两次。启动第三个客户机显示六个websocket写入-附加数据现在显示三次

你知道这是什么原因吗?愚蠢的错误?曲解?臭虫

服务器:

var dgram = require("dgram");
var udpserver = dgram.createSocket("udp4");
udpserver.bind(55555);  //udp listener

var express = require("express");
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(12345);  //tcp http listener

io.sockets.on('connection', function (socket) {
    udpserver.on('message', function (msg, rinfo) {
            io.sockets.emit('update', msg.toString());
    });
});
客户:

<!DOCTYPE HTML>
<script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script src="http://localhost:12345/socket.io/socket.io.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        var socket = new io.connect('http://localhost:12345');
        socket.on('update', function (data) {
            $("#stuff").append(data + "<br>");
        });
     });
</script>
<div id=stuff></div>
</html>

据我所知,没有节点进行测试;只要客户机不发送任何需要处理的数据,您就不会真正对socket.io连接事件感兴趣,因此您应该能够忽略它们。您想要的只是接收UDP事件并广播到当时已连接的所有客户端,这应该尽可能简单

...
var io = require('socket.io').listen(server);
server.listen(12345);  //tcp http listener

udpserver.on('message', function (msg, rinfo) {
    io.sockets.emit('update', msg.toString());
});
只是为了完整;当前代码所做的是为每个新的socket.io连接添加一个新的UDP消息回调。回调将广播到所有客户端,这意味着当第二个客户端连接时,所有广播将对所有客户端进行2次,对于3个客户端,将对所有客户端进行3次。您只需设置一次UDP消息处理程序,因为它将广播到所有连接的客户端

...
var io = require('socket.io').listen(server);
server.listen(12345);  //tcp http listener

udpserver.on('message', function (msg, rinfo) {
    io.sockets.emit('update', msg.toString());
});