Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – socket.io redis expressjs cluster – 在expressjs请求中获取套接字对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
基于这个答案的问题: https://stackoverflow.com/a/18650183/4478897

我试图找到这个解决方案,但似乎没有任何东西可以按照我需要的方式工作.

集群expressjs和socket.io我们可以使用redis共享会话并在io世界中发送io消息(io.sockets.on(‘connection’,…).问题是我们是否要发送消息(或使用简单的socket.join / leavE)在expressjs世界里面(route.get / post).

如果我们不使用集群,我们可以将客户端套接字对象发送到快速请求对象(或者只是导出io对象),然后在任何GET / POST路由上随时使用它.

另一方面,如果我们正在集群并使用上面提到的方法获取expressjs世界中的套接字对象,有时套接字对象是未定义的,因为此客户端的套接字对象是在其他worker上初始化的.

一些示例流程:

>客户端连接到http://localhost,工作人员1处理此请求.@H_618_17@>加载@L_674_14@后,客户端连接到socket.io. Worker 2处理此连接.@H_618_17@>客户端执行POST,然后worker 1或worker X处理此请求.

在这种情况下,当客户端执行POST时,只有worker 2知道该客户端的套接字对象.所以这将得到一个未定义的套接字对象.

那么,问题是:

我们如何从任何worker获取客户端套接字对象以在expressjs请求对象上重用它.

也许我的代码错误的,但几乎就像上面提到的答案的链接.

笔记

>不想使用某种代理.@H_618_17@>不想迁移到其他库(expressio,sockjs ……)@H_618_17@>抱歉我的英文:)

使用最后的nodejs,socket.io,expressjs,socket.io-redis,redis …版本

不要犹豫,不要问问题!

更新1

可能的解决方案,但仍需要测试它.不知道这是否真的很好:解决方案.

>更新3:在我自己的答案上工作代码

更新2

像更新1但使用https://nodejs.org/dist/latest-v5.x/docs/api/cluster.html#cluster_event_message

解决方法

在socket.io-redis 3.0.0中添加了remoteJoin和remoteLeave方法

io.adapter.remoteJoin('<my-id>','room1',function (err) {
  if (err) { /* unkNown id */ }
  // success
});

io.adapter.remoteLeave('<my-id>',function (err) {
  if (err) { /* unkNown id */ }
  // success
});

注意:实现看起来很多(希望如此?),如答案above.

大佬总结

以上是大佬教程为你收集整理的node.js – socket.io redis expressjs cluster – 在expressjs请求中获取套接字对象全部内容,希望文章能够帮你解决node.js – socket.io redis expressjs cluster – 在expressjs请求中获取套接字对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。