aceld / zinx

A lightweight concurrent server framework based on Golang.
https://github.com/aceld/zinx/wiki
MIT License
7.05k stars 1.21k forks source link

心跳panic #334

Closed pingqiang806796422 closed 2 weeks ago

pingqiang806796422 commented 1 month ago

1 2 3

aceld commented 1 month ago

@pingqiang806796422
Run() 有一段注释,这个代码是注释掉了,还是应该有的?

pingqiang806796422 commented 1 month ago

目前是因为有问题,才注释掉的,正常出问题肯定是没有注释的代码

aceld commented 1 month ago

嗯,这个是ws 的问题,tcp的应该不会出现, https://github.com/aceld/zinx/pull/333 这个pr先merge了,看是否还能复现 @pingqiang806796422

aceld commented 1 month ago

你 先拉下 master 分支,看能否还复现

pingqiang806796422 commented 1 month ago

我们现在心跳不是双向的吗, 可以新增配置 单项吗?服务端不主动发送消息给客户端

aceld commented 1 month ago

@pingqiang806796422 目前还不支持单向,一旦开启就是双向,如果想只做单向处理,可以将 一方的OnRemoteNotAlive() 方法设置为不处理,忽略心跳消息。

aceld commented 1 month ago

@pingqiang806796422 SetHeartbeatFunc() 可以自定义一方的心跳检测,不发送心跳包。

aceld commented 1 month ago
func (h *HeartbeatChecker) check() (err error) {

    if h.conn == nil {
        return nil
    }

    if !h.conn.IsAlive() {
        h.onRemoteNotAlive(h.conn)
    } else {
        if h.beatFunc != nil {
            err = h.beatFunc(h.conn)
        } else {
            err = h.SendHeartBeatMsg()
        }
    }

    return err
}

如果设置beatFunc 则每次心跳执行beatFunc,如果不设置才会给对方发送心跳报文

pingqiang806796422 commented 1 month ago

目前我设置了beatFunc, 前面的问题,测试不出来了,因为不会发送心跳到客户端了