javascript - 失去对 socket.io 中套接字的引用

标签 javascript reference socket.io typescript

我在服务器上有一个 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/

相关文章:

javascript - 页面完全加载后如何显示图像?

javascript - 如何在 Netflix (mac) 中自动化 "next episode"按钮?

javascript - 在 AngularJS 中从字符串更改为数组

javascript - ScrollTop 在 DIV 中不起作用并溢出 :hidden

php - 错误消息 "Strict standards: Only variables should be passed by reference"

c++ - 为什么我不能创建一个引用 vector ?

c++ - map 通过引用

javascript - 客户端 <script src ="/socket.io/socket.io.js"></script> 未找到,使用 Express-generator 生成的项目

javascript - Websockets 传输完成

node.js - socket.on 没有监听事件