gatewayworker每次重启,client_id都是从固定的1开始

lxping

下面两个图是我分别重启后截图,默认都是从client_id=1开始递增。
这样是不是一旦项目上线后,就不能关闭重启了,只能通过平滑重启,不然clietn_id与数据库的uid对不上了?或者有没有其他解决办法?

查看源码发现,client_id是通过ip+端口+connection_id的16进制,connection_id是当前连接数,所以workerman重启后,connection_id就从1重新开始计算了。

/**
 * 生成connection id
 * @return int
 */
protected function generateConnectionId()
{
    $max_unsigned_int = 4294967295;
    if (self::$_connectionIdRecorder >= $max_unsigned_int) {
        self::$_connectionIdRecorder = 0;
    }
    while(++self::$_connectionIdRecorder <= $max_unsigned_int) {
        if(!isset($this->_clientConnections[self::$_connectionIdRecorder])) {
            break;
        }
    }
    return self::$_connectionIdRecorder;
}

3918 1 0
1个回答

梁大胖

数据库只存uid啊,为什么要去存储client_id呢?对不对得上好像没啥影响吧 ,比如我把客户的username存为UID 那以后我只需要去得到他的username去拿数据库的东西啊 不需要在乎client_id 新手小白一个 不知道对不对..

  • lxping 2019-12-31

    谢谢,之前以为client_id是类似uuid或者md5之类的,永远不会重复的,所以过渡依赖了sendToClient,现在懂了

年代过于久远,无法发表回答
🔝