node.js koa2中(或express),如何在http请求中,使用websocket请求数据,然后返回给http?

发布于 2022-09-06 00:00:05 字数 515 浏览 8 评论 0

我有个需求是http请求过来后,需要从websocket与本地软件通信获取数据,然后用这个数据返回给http,本地软件只能用websocket,socket.io暂时不支持,

意淫很长时间没有好的解决方案,本来想通过websocket.send的时候带上一个唯一的返回标识比如cbEventId:id123123,然后监听这个id,等有返回结果的时候再返回http应答,

感觉理论上能行的同,但是不知道怎么写等待监听到cbEventId返回的时候再返回http应答,websocket的监听都是监听messages时间,而这个监听事件一般都是写在http请求之外的,或者说是写在入口文件的,要是在http 内再声明监听事件应该会覆盖之前的监听...

若是直接入口文件指定一个事件数组,然后再websocket监听message事件中派发监听事件,好像行的通,但是仔细一想在http应答的时候,给监听事件数组赋值,并不是异步请求,而是赋值,所以http很可能就不会返回任何东西,直接先关闭了,然后websocket派发事件得到的数据也传不回来了,请问大神们这要如何解决呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天冷不及心凉 2022-09-13 00:00:05

按照你的描述,贴个伪代码吧,可以解决问题:

// events.js
export const events = new EventEmitter();

// websocket.js
export const websocket = createWebSocket();
websocket.on('message', function(msg){
    events.trigger(msg.eventId, msg);
});

// router.js
koaRouter.post('/send-to-websocket', async function(ctx, next){
    websocket.send(JSON.stringify({
        eventId: createUniqueId(),
        data: {}
    }));
    events.on(eventId, (msg)=> {
        ctx.body = JSON.stringify(msg);
    });
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文