将socket.io封装在类中

时间:2019-12-18 21:19:29

标签: javascript node.js socket.io rollupjs

我正在尝试将socket.io封装在一个类中,因此我可以在多个文件中共享同一套接字(使用导入)。如果只使用一个文件,这是使用WebSocket的常用方法。

Test.js

let ip = "http://localhost/";
let socket = io(ip);
socket.emit("message", {"content": "hello"});

socket.on("messageResponse", function(content) {
  //Do something here.
});

我想要实现的是..

multiplayer / Socket.js

class Socket {
    constructor(ip) {
        this.socket = io(ip);
    }

    sendMessage(message, data) {
        this.socket.emit(message, data);
    }
}

export default Socket;

A.js

import Socket from "./multiplayer/Socket.js";

//listen to certain events here like socket.on("connect")

B.js

import Socket from "./multiplayer/Socket.js";

//listen to some other events here like socket.on("chatMessage")

但是我不知道如何封装on事件。我正在使用汇总将脚本捆绑在一个文件中。

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎您想创建一个单例

您可以通过导出将共享的套接字对象版本来做到这一点:

class Socket {
    constructor(ip) {
        this.socket = io(ip);
    }

    sendMessage(message, data) {
        this.socket.emit(message, data);
    }
}

export default new Socket('some_ip');

然后在您的代码中可以执行以下操作:

import s from "./multiplayer/Socket.js";

s.socket.on('something', doSomething);

在您导入该套接字对象的每个位置,它将共享所有相同的信息