将 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);
并且您导入该套接字对象的每个地方都会共享所有相同的信息
我正在尝试将 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);
并且您导入该套接字对象的每个地方都会共享所有相同的信息