padchat-sdk icon indicating copy to clipboard operation
padchat-sdk copied to clipboard

偶发,sdk与服务器连接正常,但是收取不到微信消息,出现问题时,ws ping响应异常

Open hawkwithwind opened this issue 6 years ago • 0 comments

我这边监测到不定期发生,客户端与服务器连接是活的,但是已经收取不到微信消息。 当发生这种问题时,我重启客户端重做一次自动重连,通常可以解决。

为了定位这个问题,我在客户端代码中加入了对服务器调用websocket的ping,并预期在5分钟内收到ws pong。如果超时就会报警。

  wx .on('open', async () => {
      let ret
      logger.info('连接成功!')
      connected = true

      wx.ws.isAlive = true
      if (wx.ws.pingLoop) {
        logger.info('再次启动,首先清除ping loop')
        try {
          clearInterval(wx.ws.pingLoop)
        } catch (err) {
          logger.error(err)
        }
      }
      
      wx.ws.pingLoop = setInterval(() => {
        if(wx.ws.isAlive === false) {
          //send zabbix alert
          zbx_sender.addItem(`${config.zabbix.host}`, `${config.zabbix.key}`, 0).send((err, res) => {
      	    if (err) { throw err }
      	  })
      	  return
        }

        wx.ws.isAlive = false
        wx.ws.ping(() => {})
      }, 5 * 60 * 1000)
      
      wx.ws.on('pong', () => {
      	wx.ws.isAlive = true
      	//send zabbix ok
      	zbx_sender.addItem(`${config.zabbix.host}`, `${config.zabbix.key}`, 1).send((err, res) => {
      	  if (err) { throw err }
          //logger.info('zbx %o', res)
      	})
      })

      wx.ws.on('close', () => {
      	wx.ws.isAlive = false
      	//send zabbix alert
      	zbx_sender.addItem(`${config.zabbix.host}`, `${config.zabbix.key}`, 0).send((err, res) => {
      	  if (err) { throw err }
      	})
      	clearInterval(wx.ws.pingLoop)
      })

在2019-03-12 17:00 前后,我观察到客户端与服务器连接不稳定,每5个ping中有一个超时。 当这个问题发生时,我看到,客户端已经收取不到微信消息了。我重启客户端,重新进行断线重连后,问题解决。

这个issue看看能否帮助咱们优化服务稳定性哈。

hawkwithwind avatar Mar 12 '19 09:03 hawkwithwind