【问题标题】:losing reference to the socket in socket.io失去对 socket.io 中套接字的引用
【发布时间】:2014-06-05 11:27:05
【问题描述】:

我在服务器上有一个 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())。也许有一种方法,客户端发送他的套接字元素,以便我在服务器上拥有它?

【问题讨论】:

  • 但是onMessage应该在客户端触发吗?如果你通过 onmessage 函数在服务器上接收消息,这里 Socket.io 是没用的。
  • 我猜不是,因为在客户端我正在发送一个 'socket.emit('message')' 然后我在 onMessage 函数中并希望将此消息广播给所有连接的用户(除了发件人)。在客户端,连接的用户会收到一条消息,他们可以在其中显示更改。

标签: javascript reference socket.io typescript


【解决方案1】:
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'
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    相关资源
    最近更新 更多