踩坑:egg.js在Nginx docker中提示 Session ID unknown

将egg.js应用部署到Docker并使用Nginx时,遇到WebSocket连接失败,提示Session ID unknown的问题。原因是Egg.js以Cluster模式启动,而socket.io需要在sticky模式下工作。解决办法是在Nginx配置中添加sticky参数,并在startCluster中启用。修改Nginx配置和Docker启动脚本后,问题得到解决。
摘要由CSDN通过智能技术生成

问题: 在本地启动egg.js,使用egg-socket.io,能正常连接到websocket,而放到docker中运行,则无法连接得上,提示Session ID unknown,http报400错误。

原因: 之所以在本地能成功连接,是因为本地启动方式为egg-bin dev,会针对本地开发做很多处理,而在docker中启动脚本是egg-scripts start,如果没有在sticky模式下运行,则会出现无法正常连接,同时报错。

值得注意点是Egg框架是以 Cluster 方式启动的,而 socket.io 协议实现需要 sticky 特性支持,否则在多进程模式下无法正常工作。

由于 socket.io 的设计,在多进程中服务器必须在 sticky 模式下工作,故需要给 startCluster 传递 sticky 参数。

添加之后再运行就连接正常了。

修改 package.jsonnpm scripts 脚本:

{
   
  "scripts": {
   
    "dev": "egg-bin dev --sticky",
    "start": "egg-scripts start --sticky"</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_czbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值