各位大神,我有兩個問題想請教一下,
?
問題一:
?我是在TP5的控制器中,進(jìn)行了client_id與uid綁定:
// client_id與uid綁定
$Gateway::bindUid($client_id,$mbid);在控制器內(nèi),client_id與uid綁定完成以后,我又用?$mbida = $Gateway::getUidByClientId($client_id);?方法取出了uid,目的是測試一下是否綁定成功。
?
在測試已確定client_id與uid綁定成功后,在events.php的onConnect($client_id)中,想要用getUidByClientId($client_id)取出uid,但是取出的結(jié)果卻是null。
?
我看了手冊,以及基于我以上的測試,我的總結(jié)是,在events的回調(diào)方法中,uid的綁定和uid的獲取,只能在同一個方法里進(jìn)行,若在控制器那邊綁定,在回調(diào)函數(shù)中想要getUidByClientId是不可能的。
?
請問我這樣認(rèn)為是對的嗎?
?
問題二:
?
既然在events的回調(diào)方法中,無法通過getUidByClientId方法獲得在控制器里綁定的uid,那么有什么方法可以在onConnect($client_id)中獲得到uid的數(shù)據(jù)呢。
?
實在不行,我只能在前端頁面放一個定時器,然后讓定時器發(fā)送uid,然后在events的onmessgae里,通過$message獲得uid了,但是感覺還是沒有在onConnect里得到好。
?
謝謝
在控制器里用了setsession,在onconnect里用了getsession也不行,看來,設(shè)置和獲取必須都在同一個回調(diào)函數(shù)里,如果設(shè)置在控制器里,在events里是獲取不到值的。
你的controller里的client_id和onconnect的client_id是同一個?
感謝回復(fù),剛剛測試了一下,控制器里的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,已經(jīng)在gatewayworker的服務(wù)端輸出驗證了。按照手冊上說的,“client_id是由GatewayWorker自動生成的”,所以我將GW自動生成的client_id通過ajax post給控制器,控制器收到的client_id沒有變化。
onConnect先于onMessage執(zhí)行啊,onConnect的時候這個client_id還沒執(zhí)行bindUid呢,getUidByClientId當(dāng)然不會有值吧。
您說的對,確實是這個原因,我又把bindUid的操作放到了前端的ws.onConnect = function(e){}里面了,在events里的onConnect依然無法取出uid,看來是先執(zhí)行events里的onConnect后執(zhí)行ws.onConnect,請問層主,除了通過前端ws.onmessage里,把uid作為message發(fā)送給服務(wù)端以外,是不是就沒有別的辦法把uid傳值到events里了?感謝回復(fù)
看了手冊,
?
確實是無法在onConnect事件中獲取uid,
?
“onConnect事件僅僅代表客戶端與gateway完成了TCP三次握手,這時客戶端還沒有發(fā)來任何數(shù)據(jù),此時除了通過$_SERVER獲得對方ip,沒有其他可以鑒別客戶端的數(shù)據(jù)或者信息,所以在onConnect事件里無法確認(rèn)對方是誰。
?
要想知道對方是誰,需要客戶端發(fā)送鑒權(quán)數(shù)據(jù),例如某個token或者用戶名密碼之類,在http://doc2.workerman.net/on-messsge.html里做鑒權(quán)。”