weixin_39897758
weixin_39897758
2020-11-25 08:32

线上nginx配置https之后socket总是会断

本地开发用端口连接一切正常,放到线上环境配置了nginx代理之后连接上之后不到1分钟就是close,然后报socket连接关闭,但是消息又能发送。 socket总是关闭是怎么回事? 这个是前端关闭回调 image

这个是服务端的关闭提示 image

该提问来源于开源项目:node-pinus/pinus

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

12条回答

  • weixin_39897758 weixin_39897758 5月前

    没有收到onKick的消息,只是收到socket close的消息,同时另一个用户socket close但是没有收到下线的消息 ,消息依然是可以发送成功的,看下图 image 配置是拿以前的配置一样用的,帮忙看一下: image image

    点赞 评论 复制链接分享
  • weixin_39641173 weixin_39641173 5月前

    可以发消息那个 说明没有断。 可能你断的只是 gate。

    http://gate2/socket.io/ 你确定是对的吗? 带了路径是对的吗? 不太熟悉nginx。 nginx的配置建议去百度一下,如何配置 websocket代理

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    以前老的写的是这样的,我复制修改的,socket.io/加和不加都是一样的效果,我再找找看

    点赞 评论 复制链接分享
  • weixin_39641173 weixin_39641173 5月前

    你如果不确定问题是nginx配置原因的话,建议先把端口开放出来测试一下。 如果直连没有问题。那么肯定就是nginx的配置问题。

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    看log应该断的只是gate,而且消息是可以正常发送的,但是多了一个socket断开的这样的提示。本地开发的时候用ip没有这样的问题,目前来看只能推测是nginx的配置问题

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    网上说nginx的websocket配置也没有问题 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; 这两个是没问题的

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    找到问题了: WebSockets 仍然受到 Nginx 缺省为60秒的 proxy_read_timeout 的影响。这意味着,如果你有一个程序使用了 WebSockets,但又可能超过60秒不发送任何数据的话,那你要么需要增加超时时间,要么实现一个 ping 的消息以保持联系。使用 ping 的解决方法有额外的好处,可以发现连接是否被意外关闭。

    原文地址: 配置Nginx支持WSS(WebSocket)

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    文中提到的ping在pomelo中要怎么实现?

    点赞 评论 复制链接分享
  • weixin_39641173 weixin_39641173 5月前

    一般会这样配置心跳

    
        app.set('connectorConfig',
            {
                connector: HybridConnector,
                heartbeat: 180,
                useDict: true,
                useProtobuf: true,
            });
    
    

    180是秒

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    是的,多谢! 新的服务里面没有开启heartbeat

    点赞 评论 复制链接分享
  • weixin_39897758 weixin_39897758 5月前

    图片显示不了? 这个是服务端报错的提示 [2020-01-06 09:59:29.508] [DEBUG] pomelo - [/data/www/new_crm_chat_room/game-server/node_modules/pomelo/lib/common/service/sessionService.js] session on [gate-server-1] is closed with session id: 126

    点赞 评论 复制链接分享
  • weixin_39641173 weixin_39641173 5月前

    服务端有两个情况会显示这个日志,一个是 客户端主动断开,第二个是 服务端主动调用 kick。

    如果是服务端主动调用 kick,那么客户端会收到 onKick消息。

    如果客户端没有收到 onKick 消息,那可能是你的代理设置有问题。

    点赞 评论 复制链接分享

相关推荐