gatewayworker如何获取客户端的uid呢?

bv

各位大神,我有两个问题想请教一下,
 
问题一:
 我是在TP5的控制器中,进行了client_id与uid绑定:
// client_id与uid绑定
$Gateway::bindUid($client_id,$mbid);在控制器内,client_id与uid绑定完成以后,我又用 $mbida = $Gateway::getUidByClientId($client_id); 方法取出了uid,目的是测试一下是否绑定成功。
 
在测试已确定client_id与uid绑定成功后,在events.php的onConnect($client_id)中,想要用getUidByClientId($client_id)取出uid,但是取出的结果却是null。
 
我看了手册,以及基于我以上的测试,我的总结是,在events的回调方法中,uid的绑定和uid的获取,只能在同一个方法里进行,若在控制器那边绑定,在回调函数中想要getUidByClientId是不可能的。
 
请问我这样认为是对的吗?
 
问题二:
 
既然在events的回调方法中,无法通过getUidByClientId方法获得在控制器里绑定的uid,那么有什么方法可以在onConnect($client_id)中获得到uid的数据呢。
 
实在不行,我只能在前端页面放一个定时器,然后让定时器发送uid,然后在events的onmessgae里,通过$message获得uid了,但是感觉还是没有在onConnect里得到好。
 
谢谢

4669 4 0
4个回答

bv

在控制器里用了setsession,在onconnect里用了getsession也不行,看来,设置和获取必须都在同一个回调函数里,如果设置在控制器里,在events里是获取不到值的。

  • 暂无评论
buck

你的controller里的client_id和onconnect的client_id是同一个?

  • bv 2018-11-12

    感谢回复,刚刚测试了一下,控制器里的client_id和events里onconnect的client_id是同一个id,我在前端页面,通过ajax post的方式把,gatewayworker生成的client_id传给了控制器: $.post('/home/live/bind/mbid/{$uidu}', {client_id:data.client_id}, function(data){}, 'json'); 所以控制器从前端收到的client_id确实就是events里onconnect的client_id,已经在gatewayworker的服务端输出验证了。按照手册上说的,“client_id是由GatewayWorker自动生成的”,所以我将GW自动生成的client_id通过ajax post给控制器,控制器收到的client_id没有变化。

昵称无所谓的

onConnect先于onMessage执行啊,onConnect的时候这个client_id还没执行bindUid呢,getUidByClientId当然不会有值吧。

  • bv 2018-11-12

    您说的对,确实是这个原因,我又把bindUid的操作放到了前端的ws.onConnect = function(e){}里面了,在events里的onConnect依然无法取出uid,看来是先执行events里的onConnect后执行ws.onConnect,请问层主,除了通过前端ws.onmessage里,把uid作为message发送给服务端以外,是不是就没有别的办法把uid传值到events里了?感谢回复

bv

看了手册,
 
确实是无法在onConnect事件中获取uid,
 
“onConnect事件仅仅代表客户端与gateway完成了TCP三次握手,这时客户端还没有发来任何数据,此时除了通过$_SERVER获得对方ip,没有其他可以鉴别客户端的数据或者信息,所以在onConnect事件里无法确认对方是谁。
 
要想知道对方是谁,需要客户端发送鉴权数据,例如某个token或者用户名密码之类,在http://doc2.workerman.net/on-messsge.html里做鉴权。”

  • 暂无评论
年代过于久远,无法发表回答
🔝