Gateway::bindUid接口的uid参数不能为字符串的bug

追梦随想

问题描述

项目里有设备和用户,在和通道绑定的时候做了判断是设备还是用户,然后用各自的ID绑定了通道ID,最终出现了一个ID重复的耦合,比如:设备ID是8,用户ID也是8,这时候再通过Gateway::getClientIdByUid去获取通道ID的时候就不准确了。

这时候需要把设备ID和用户ID变成字符串来区分,比如:device-8,user-8,但是发现系统会出现异常,不停的执行绑定操作,打印绑定结果确实绑定成功了,但是系统不正常

程序代码或配置

            //将连接通道ID绑定到设备/用户,删除认证定时器
            $client_name = "$client_type-$client_id";
            Gateway::bindUid($connect_id, $client_name);
            Log::info('绑定连接通道:' . $connect_id . '=>' . ($client_type == 'device' ? '设备ID ' : '用户ID ') . $client_id);
            Log::info($connect_id . '=>' . $client_name);
            $client_list = Gateway::getClientIdByUid($client_name);
            Log::info(implode(',', $client_list));
            Timer::del($_SESSION['auth_timer_id']);

只要把uid参数改成数字,就没有问题,系统也正常

操作系统环境及workerman/webman等具体版本

    "workerman/gateway-worker": "3.0.8",
    "workerman/gatewayclient": "3.0.8",
    "workerman/workerman": "4.1"
337 1 0
1个回答

latin

你代码bug啊,你找下为啥你前端一直发请求绑定。
代码bug得自己查,别人没代码没环境的没法给你猜测

  • 追梦随想 2023-12-01

    与前端无关吧,同样的代码,只是Gateway::bindUid接口的参数类型不同而已,又没有循环绑定操作

  • fklee 2023-12-01

    从来没有绑定uid不能是字符串的问题,如果有,就是你自己代码问题

  • Tinywan 2023-12-01

    赞成

🔝