将 socket.io 封装在 class 中

Encapsulate socket.io inside a class

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

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事件。我正在使用汇总将脚本捆绑在一个文件中。

谢谢!

看来你想创建一个单例

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

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);

并且您导入该套接字对象的每个地方都会共享所有相同的信息