我的里面有这段代码socketio
文件,在这里我可以使用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
插座到emit
来自各种文件的事件并且不想连接此io.on('connection', async(socket) => {})
每次。
我怎样才能做到这一点?
谢谢你!!!
next
回调在这里没有什么用处,因为它是同步的。自从socket.ioconnection
事件可以被多次触发,它不能转换为更容易链接的承诺,因此最好保持基于回调。
有可能:
var socketIo = require('socket.io')
exports.register = (server, options) => {
var io = socketIo(server.listener);
return onConnect => {
io.on('connection', onConnect);
};
}
因此连接函数创建一次:
const myConnection = register(myServer);
并通过应用程序使用:
myConnection(client => {
...
});
这种情况也可以从可观察到的情况中受益,例如RxJS。
如果套接字不支持重新连接,则可以简化为:
exports.register = (server, options) => {
var io = socketIo(server.listener);
return new Promise(resolve => {
io.once('connection', resolve);
});
}
连接承诺创建一次:
因此连接函数创建一次:
const myConnection = register(myServer);
并通过应用程序使用:
const client = await myConnection;
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)