gpt4 book ai didi

node.js - Node socket.io 客户端监听发送给其他客户端的事件

转载 作者:搜寻专家 更新时间:2023-11-01 00:46:03 24 4
gpt4 key购买 nike

我构建了一个简单的 Node socket.io 服务器和两个简单​​的 Node socket.io 客户端。每个客户端连接到服务器,发送一个请求,等待响应,然后打印它。问题是,每个响应都打印了两次,因为每个客户端不仅得到了自己的响应,还得到了其他客户端的响应!为什么?

这是服务器代码:

var io = require('socket.io').listen(10001);
io.sockets.on('connection', function (socket) {
socket.on('echo', function (data) {
console.log("got request to echo "+data);
socket.emit("echoes", data+" "+data);
});
});

这是客户端代码:

var socketioclient = require('socket.io-client');
var socket1 = socketioclient.connect(HOST, {port: PORT});
var socket2 = socketioclient.connect(HOST, {port: PORT});

socket1.on('connect', function () { console.log("socket1 connected!"); });
socket2.on('connect', function () { console.log("socket2 connected!"); });

socket1.on('echoes', function (result) { console.log("socket1 received: "+result); });
socket2.on('echoes', function (result) { console.log("socket2 received: "+result); });

socket1.emit('echo', "aaa");
socket2.emit('echo', "bbb");

这是客户端输出:

socket1 connected!
socket2 connected!
socket1 received: aaa aaa
socket2 received: aaa aaa
socket1 received: bbb bbb
socket2 received: bbb bbb

这是服务器日志:

   info  - socket.io started
debug - client authorized
info - handshake authorized niJGX0EXWvLPw2THZOeD
debug - setting request GET /socket.io/1/websocket/niJGX0EXWvLPw2THZOeD
debug - set heartbeat interval for client niJGX0EXWvLPw2THZOeD
debug - client authorized for
debug - websocket writing 1::
got request to echo aaa
debug - websocket writing 5:::{"name":"echoes","args":["aaa aaa"]}
got request to echo bbb
debug - websocket writing 5:::{"name":"echoes","args":["bbb bbb"]}
debug - emitting heartbeat for client niJGX0EXWvLPw2THZOeD
debug - websocket writing 2::
debug - set heartbeat timeout for client niJGX0EXWvLPw2THZOeD
debug - got heartbeat packet
debug - cleared heartbeat timeout for client niJGX0EXWvLPw2THZOeD
debug - set heartbeat interval for client niJGX0EXWvLPw2THZOeD
debug - emitting heartbeat for client niJGX0EXWvLPw2THZOeD
debug - websocket writing 2::
debug - set heartbeat timeout for client niJGX0EXWvLPw2THZOeD

最佳答案

默认情况下,socket.io 客户端将重复使用从同一客户端到同一主机/端口 (doc) 的现有连接。您可以使用 force new connection 选项禁用此行为:

// client.js
var socket1 = socketioclient.connect(HOST, {port: PORT, 'force new connection': true });
var socket2 = socketioclient.connect(HOST, {port: PORT, 'force new connection': true });

关于node.js - Node socket.io 客户端监听发送给其他客户端的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com