我已经在快递服务器中实现了socket.io。一切正常,但我要避免在主文件中包含较长的套接字脚本。因此,我创建了一个单独的服务来处理另一个文件中的套接字逻辑:
main.js:
io.on("connect", SocketManager(io))
socketManager.js:
const SocketManager = (io) => {io.on("connect", ()=> do stuff}
但是这样做时,我只能使用io实例。套接字是未定义的,这很不幸,因为我必须访问它才能完成特定的任务。可悲的是,我不能仅将套接字作为第二个参数传递给SocketManager。如何解决这个问题?
答案 0 :(得分:1)
您的代码忽略了传递到socket
事件中的connect
,因此您错过了使用实际新创建的套接字的机会。
要解决,请更改此内容:
io.on("connect", SocketManager(io))
对此:
SocketManager(io)
您要做的就是初始化套接字管理器,并将其传递给io
实例,并使其监听connect
事件本身。
然后,在您的SocketManager
代码中,您要注意传递到socket
事件中的connect
自变量。所以,改变这个:
const SocketManager = (io) => {io.on("connect", ()=> do stuff}
对此:
const SocketManager = (io) => {
io.on("connect", (socket) => {
// do stuff using newly connected socket in here
});
});