国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman-chat調(diào)用onclose無(wú)效

re3wq
case 'login':
                // 判斷是否有房間號(hào)
                if(!isset($message_data['room_id']))
                {
                    throw new \Exception("\$message_data['room_id'] not set. client_ip:{$_SERVER['REMOTE_ADDR']} \$message:$message");
                }

                // 把房間號(hào)昵稱放到session中
                $room_id = $message_data['room_id'];
                $client_name = htmlspecialchars($message_data['client_name']);
                $_SESSION['room_id'] = $room_id;
                $_SESSION['client_name'] = $client_name;

                // 獲取房間內(nèi)所有用戶列表 
                $clients_list = Gateway::getClientSessionsByGroup($room_id);
                foreach($clients_list as $tmp_client_id=>$item)
                {
                    //如果有重名的用戶,通知對(duì)方退出并刪除列表
                    if($item['client_name']==$client_name){
                        self::onClose($tmp_client_id);
                        unset($clients_list[$tmp_client_id]);
                        continue;
                    }
                    $clients_list[$tmp_client_id] = $item['client_name'];
                }
                $clients_list[$client_id] = $client_name;

                // 轉(zhuǎn)播給當(dāng)前房間的所有客戶端,xx進(jìn)入聊天室 message {type:login, client_id:xx, name:xx} 
                $new_message = array('type'=>$message_data['type'], 'client_id'=>$client_id, 'client_name'=>htmlspecialchars($client_name), 'time'=>date('Y-m-d H:i:s'));
                Gateway::sendToGroup($room_id, json_encode($new_message));
                Gateway::joinGroup($client_id, $room_id);

                // 給當(dāng)前用戶發(fā)送用戶列表 
                $new_message['client_list'] = $clients_list;
                Gateway::sendToCurrentClient(json_encode($new_message));
                return;

self::onClose($tmp_client_id);

調(diào)用onClose方法,可以通知對(duì)方logout,但是client_id依然存在,對(duì)方刷新以后會(huì)有多個(gè)client_id,造成兩方無(wú)法聊天,請(qǐng)大神看一下這是怎么回事

2389 1 0
1個(gè)回答

walkor 打賞

onClose 方法是發(fā)生連接關(guān)閉事件自動(dòng)觸發(fā)的方法,并不是主動(dòng)關(guān)閉連接的接口。使用gatewayWorker請(qǐng)先閱讀文檔。

  • re3wq 2020-09-28

    大神,主動(dòng)關(guān)閉需要調(diào)用什么接口啊,老板只催進(jìn)度,不管方法。。

  • re3wq 2020-09-28

    Gateway::closeClient($tmp_client_id);
    用了closeClient方法,順便跟大神說(shuō)一下workerman-chat聊天室也有這個(gè)bug,斷線重連的話會(huì)生成相同名稱的client_id,手機(jī)切換網(wǎng)絡(luò)很短的斷線重連時(shí)間就會(huì)出現(xiàn)這種問(wèn)題

  • walkor 2020-09-28

    框架有機(jī)制,運(yùn)行過(guò)程中不計(jì)產(chǎn)生重復(fù)的client_id

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??