收藏
回答

关于websocket的连接稳定性问题

问题模块
API和组件

服务端用的nginx作为代理,用xampp作为webserver,php写的websocket服务端。

不知为何,每次小程序连接websocket之后,经过1分钟左右时间(不一定的时间间隔),websocket就会自动断开。

我在app.js中做了定时监听,断开了就进行重新连接。但是我还是很奇怪为什么不能一直连接,只要网络本身是良好状态。

如图所示:


最后一次编辑于  2017-11-13  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

7 个回答

  • 曹伟
    曹伟
    2018-06-10

    请问有php写的websocket的demo吗


    2018-06-10
    赞同
    回复 1
    • 曹伟
      曹伟
      2018-06-10

      我想学习一波,谢谢你

      2018-06-10
      回复
  • 彭享
    彭享
    2017-11-13

    这个是由具体场景决定的,我目前做的这个事情是,需要好几个人之间进行互动的,如果有人没有连接上的话,肯定收不到相应的消息,所以必须保持连接状态

    2017-11-13
    赞同
    回复
  • 王克寒
    王克寒
    2017-11-13

    这样也好,我们这边的处理是1分钟断开就断开了,重连发生在下次发送数据的时候,如果websocket处于断开状态,再重连,而不是在关闭后马上重连

    2017-11-13
    赞同
    回复
  • 彭享
    彭享
    2017-11-13

    谢谢。谢谢。我试试

    2017-11-13
    赞同
    回复
  • 王克寒
    王克寒
    2017-11-13

    实现心跳要双向的,你发一个数据,服务端要回一条数据,不然,nginx转发代理的时候,认为客户端还连着,65s没有收到服务端的数据,会认为服务端的连接已无效,然后就会走关闭连接的过程

    2017-11-13
    赞同
    回复
  • 彭享
    彭享
    2017-11-13

    我在nginx里面设置了65s的连接超时。然后在小程序里面,每隔50s会发送一条无用的消息过去,作为心跳,但是貌似还是会如此,我也是无解了。。。之前没用nginx的时候,在服务端用ws倒是还挺稳定的。不过要是发布,必须用wss,只能用nginx做代理来处理https和wss。

    2017-11-13
    赞同
    回复
  • 王克寒
    王克寒
    2017-11-13

    nginx没有实现心跳,1分钟内没有传输数组就会自动断开websocket连接,重连的时候,没有onSocketOpen事件,我在写websocket库也遇到这个问题

    2017-11-13
    赞同
    回复