如何全局定义套接字变量 [英] How to define socket variable globally
问题描述
我在 socketio
文件中有这段代码,在这里我可以简单地使用 socket
。
I have this piece of code in my socketio
file and here I can use socket
simply.
import _ from 'lodash'
import mongoose from 'mongoose'
exports.register = (server, options, next) => {
var io = require('socket.io')(server.listener)
io.on('connection', async(socket) => {
// here I can use socket.emit() and all
})
next()
}
exports.register.attributes = {
name: 'socket'
}
现在,我需要使用 io
套接字发出
来自各种文件的事件,不想连接这个 io.on('connection',async(socket)每次都=)>> {})
。
Now, I need to use theio
socket to emit
events from various files and don't want to connect this io.on('connection', async(socket) => {})
every time.
我该怎么做?
谢谢!!!
推荐答案
next
回调在这里没有用处,因为它是同步的。由于socket.io 连接
事件可以多次触发,因此无法将其转换为更容易链接的承诺,因此最好保持基于回调的事件。
next
callback doesn't serve a good purpose here because it's synchronous. Since socket.io connection
event can be triggered multiple times, it cannot be converted to a promise for easier chaining, so it's better for it to stay callback-based.
它可以是:
var socketIo = require('socket.io')
exports.register = (server, options) => {
var io = socketIo(server.listener);
return onConnect => {
io.on('connection', onConnect);
};
}
因此创建连接函数一次:
So connection function is created once:
const myConnection = register(myServer);
并通过申请使用:
myConnection(client => {
...
});
这种情况也可以受益于可观察量,例如: RxJS。
This situation can also benefit from observables, e.g. RxJS.
如果套接字不支持重新连接,可以简化为:
In case the socket shouldn't support reconnections, this could be simplified to:
exports.register = (server, options) => {
var io = socketIo(server.listener);
return new Promise(resolve => {
io.once('connection', resolve);
});
}
连接承诺创建一次:
所以连接函数创建一次:
So connection function is created once:
const myConnection = register(myServer);
并通过申请使用:
const client = await myConnection;
...
这篇关于如何全局定义套接字变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!