项目里有设备和用户,在和通道绑定的时候做了判断是设备还是用户,然后用各自的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/gateway-worker": "3.0.8",
"workerman/gatewayclient": "3.0.8",
"workerman/workerman": "4.1"
你代码bug啊,你找下为啥你前端一直发请求绑定。
代码bug得自己查,别人没代码没环境的没法给你猜测
与前端无关吧,同样的代码,只是
Gateway::bindUid
接口的参数类型不同而已,又没有循环绑定操作从来没有绑定uid不能是字符串的问题,如果有,就是你自己代码问题
赞成