// 全局?jǐn)?shù)組保存uid在線數(shù)據(jù)
$uidConnectionMap = array();
$live_agent_arr=array(); //自定義了個(gè)函數(shù),在 $socket->on( 'login', function ( $uid )use( $socket ) 引用是null的,不解
echo "is_arraya-".is_array($live_agent_arr)." is_nulla-".is_null($live_agent_arr)." is_stringa-".is_string($live_agent_arr)."\n\n";
// PHPSocketIO服務(wù)
$sender_io = new SocketIO( 2120 );
// 客戶端發(fā)起連接事件時(shí),設(shè)置連接socket的各種事件回調(diào)
$sender_io->on( 'connection', function ( $socket ) {
// 當(dāng)客戶端發(fā)來(lái)登錄事件時(shí)觸發(fā)
$socket->on( 'login', function ( $uid )use( $socket ) {
global $uidConnectionMap,$last_online_count,$last_online_page_count,$live_agent_arr;
// 已經(jīng)登錄過(guò)了
if ( isset( $socket->uid ) ) {
return;
}
// 更新對(duì)應(yīng)uid的在線數(shù)據(jù)
$uid = ( string )$uid;
if ( !isset( $uidConnectionMap ) ) {
$uidConnectionMap = 0;
}
echo "is_arrayb-".is_array($uidConnectionMap)." is_nullb-".is_null($uidConnectionMap)." is_stringb-".is_string($uidConnectionMap)."\n\n"; //執(zhí)行結(jié)果 is_array($uidConnectionMap) 可以 true
echo "is_array-".is_array($live_agent_arr)." is_null-".is_null($live_agent_arr)." is_string-".is_string($live_agent_arr)."\n\n"; //執(zhí)行結(jié)果 is_array($live_agent_arr) 是flase, is_null($live_agent_arr)=true
// 這個(gè)uid有++$uidConnectionMap個(gè)socket連接
++$uidConnectionMap;
if(isset($live_agent_arr)){
array_push( $live_agent_arr, array( "exten" => $uid, "channel" => "" ) );
}
// 將這個(gè)連接加入到uid分組,方便針對(duì)uid推送數(shù)據(jù)
$socket->join( $uid );
$socket->uid = $uid;
} );
} );
執(zhí)行結(jié)果如下:
?
我十分不理解的是,為何 我自己定義的$live_agent_arr 在 function ($uid) use($socket) 是 null, 而例子里自帶的$uidConntionMap可以正常使用? 我該怎么樣使用自己定義的array?請(qǐng)各位大神不吝賜教,小白跪謝!!!
?
感謝大神回復(fù)!
額 ,我最終還是沒搞定,??global $live_agent_arr = array(); 我用這種寫法獲取全局得到的是null ? ,? 用例子里自帶的?$uidConnectionMap 是可以獲取到值的,沒搞清楚是為什么, 就是很不理解為何我自己寫的 $live_agent_arr 獲取不到. 最終改用了? http://doc.workerman.net/components/global-data-server.html