我在服务器上有一个 typescript 类,它正在处理我的 socket.io 通信,如下所示。基本上它可以工作,但是 ofc 服务器只保存最新的套接字引用。 (最后连接到服务器的人,因为每次有人连接时变量都会被覆盖)。
class ChatService {
private server;
private app;
private io;
private socket;
constructor(app, server) {
this.app = app;
this.server = server;
this.io = require('socket.io').listen(this.server);
this.io.set('log level', 1);
this.io.sockets.on('connection', (socket) => {
console.log('a user connected');
socket.join('test');
console.log(this.io.sockets.clients('test').length + ' - ' + socket.id);
this.socket = socket;
socket.on('message', (data) => this.onMessage());
socket.on('disconnect', function(){
console.log('user disconnected');
});
});
}
public onMessage() {
this.socket.broadcast.to('test').emit('message', {
message: 'test message'
});
}
}
export = ChatService;
您有什么好的做法可以让我获得正确的引用(以便我可以调用 socket.broadcast.to('test').emit()
)。也许有一种方法,客户端发送他的套接字元素,以便我将它放在服务器上?
最佳答案
socket.on('message', (data) => this.onMessage());
按此更改:
socket.on('message', (data) => this.onMessage(socket,data));
然后您就拥有了广播和重新发送数据所需的一切。
public onMessage(socket,data) {
socket.broadcast.to('test').emit('message', {
message: 'test message'
});
}
关于javascript - 失去对 socket.io 中套接字的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058983/