我正在开发一个Node.js应用程序,其中我们使用socket.io向客户端发送和接收事件/消息。最初,它使用以下语句将事件发送给客户端。
io.sockets.emit('SequenceLoad',data);
但是现在我只想使用客户端特定的套接字将事件发送到特定的客户端。我对此进行了很多搜索,找到了一些方法,但是在各种SO帖子上却发现它们似乎都不起作用。
这是我尝试过的代码:
const io = require('socket.io')(http);
var socketsCollection = [];
io.on('connection', function (socket) {
//Saving socket id's for sending events to specific sockets based on their ids
socketsCollection.push(socket.id);
socket.on('SequenceLoadServer', function (data) {
// logger.info('Socket Server | Event: sequenceLoadServer with socket server. \n Data:'+ data);
console.log("In APP.js for SequenceLoadServer event");
console.log("Socket Id :" + socket.id);
var socketId = null;
setTimeout(function () {
for (var item of socketsCollection) {
if(item == socket.id){
socketId= item;
break;
}
}
console.log("Socket after searching Id :" + socketId);
io.sockets.emit('SequenceLoad', data); -> This works at the moment
//Tried the following ways as well but none of them worked
//io.sockets.connected[socketId].emit('SequenceLoad', data);
//io.sockets.socket(socketId).emit('SequenceLoad', data);
//io.to(socketId).emit('SequenceLoad', data);
//io.to('/#' + socketId).emit('SequenceLoad', data);
//io.to(`${socketId}`).emit('SequenceLoad', data);
}, 1000 * 3);
});
}
我的项目中的socket.io版本:
"socket.io": "^2.2.0",
"socket.io-client": "^2.2.0"
如果我做错了什么,因为我是新来的,所以任何帮助都会很棒,请纠正我。谢谢
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以保持所有套接字连接的对象,其中键是套接字的<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.42</version>
</dependency>
,值可以是<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
本身:
id