gpt4 book ai didi

javascript - 如何全局定义套接字变量

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:34 25 4
gpt4 key购买 nike

我的socketio文件中有这段代码,在这里我可以简单地使用socket

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) => {}) 每次。

我该怎么做?

谢谢!!!

最佳答案

next 回调在这里用处不大,因为它是同步的。由于 socket.io connection 事件可以被多次触发,它不能转换为更容易链接的 promise ,所以它最好保持基于回调。

可以是:

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);
});
}

连接 promise 创建一次:

所以连接函数只创建一次:

const myConnection = register(myServer);

并通过应用程序使用:

const client = await myConnection;
...

关于javascript - 如何全局定义套接字变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55509973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com