Gateway进程被占满时,是否会导致无法接收到心跳从而被强制断开连接

李总

问题描述

gateway进程数为4,客户端会传来大量的数据到onMessage方法,onMessage中要处理大量的数据
这样会不会导致onMessage无法接收到心跳,从而导致websocket连接被强制断开

截图

中间还有2次心跳,客户端发了,但后端好像没有收到
32分35秒时websocket连接无故被断开
33分12秒时客户端重新连接成功

现在不知道为何被断开了

// 心跳间隔
$gateway->pingInterval = 50;

260 1 0
1个回答

walkor

$gateway->pingInterval = 50; 含义是客户端50秒内没发来心跳,则关闭连接,和businessWorker的onMessage没有关系。
websocket连接断开是很正常的现象,浏览器刷新,电脑休眠,手机浏览器进入后台,切换tab页面后原页面js被暂停(心跳无法发送),网络波动等很多情况都可能导致。客户端做好重连就行。

  • 李总 2024-07-01

    因为客户端是一个摄像头需要实时拍照,断开几秒会出现漏拍情况
    所以websocket连接始终不可以断开,现在客户端每隔30秒就会发一个心跳数据到onMessage上
    但现在从tcpdump上看,好像有的心跳数据并没有接收到,所以导致断开了,为啥没接收到,暂时还没找到原因

  • walkor 2024-07-01

    抓包看心跳有没有发上来,另外抓包能看到是谁关闭的连接。如果是客户端关闭的,需要从客户端找问题。
    也有可能客户端发送数据快于onMesasge处理速度,导致消息积压,心跳消息没处理到。

×
🔝