我正在尝试将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事件。我正在使用汇总将脚本捆绑在一个文件中。
谢谢!
答案 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);
在您导入该套接字对象的每个位置,它将共享所有相同的信息