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

workerman教程4(新手必看)

a6965921

workerman教程4(新手必看)

今天就來(lái)講講聊天室框架的event類(lèi)

先看這個(gè)函數(shù)
public static function onMessage($client_id, $message)

$client_id這個(gè)是服務(wù)器和客戶(hù)端的鏈接字 任何收發(fā)數(shù)據(jù)都要靠他
不同的客戶(hù)端 和服務(wù)端連接 會(huì)有不用的鏈接字

$message這個(gè)是服務(wù)端收到的數(shù)據(jù)

// 如果是websocket握手
if(self::checkHandshake($message))
{
// debug
echo "client:{$_SERVER}:{$_SERVER} gateway:{$_SERVER}:{$_SERVER} client_id:$client_id onMessage:".$message."\n";
return;
}

   先握手 這個(gè)是websocket協(xié)議最基礎(chǔ)的東西 連接前先握手

   所謂握手我簡(jiǎn)單的說(shuō)下 就是客戶(hù)端發(fā)送數(shù)據(jù)給服務(wù)端 服務(wù)端收到的數(shù)據(jù)發(fā)給客戶(hù)端 然后就握手了 一旦握手就代表連接了
   如果握手失敗就 不會(huì)連接

    // 解碼websocket,得到原始數(shù)據(jù)
    $message =WebSocket::decode($message);

    收到的數(shù)據(jù)要解碼哦

     $message_data = json_decode($message, true);//解析客戶(hù)端發(fā)過(guò)來(lái)的數(shù)據(jù)

     //將客戶(hù)端發(fā)過(guò)來(lái)的房間id放到 變量$room_id
      $room_id = $message_data;

      //從客戶(hù)端發(fā)過(guò)來(lái)的昵稱(chēng)放到$client_name

$client_name = htmlspecialchars($message_data);

 // 存儲(chǔ)到當(dāng)前房間的客戶(hù)端列表
            $all_clients = self::addClientToRoom($room_id, $client_id, $client_name);

            這個(gè)就是客戶(hù)端發(fā)過(guò)來(lái)的房間ID 用戶(hù)昵稱(chēng)等都存在memcache 我在workerman教程3 說(shuō)明了 怎么查看里面的數(shù)據(jù)

               // 整理客戶(hù)端列表以便顯示 其實(shí)也就是原來(lái)的一位數(shù)組變成二維數(shù)組 提高可讀性
            $client_list = self::formatClientsData($all_clients);

      $new_message = array('type'=>$message_data, 'client_id'=>$client_id, 'client_name'=>htmlspecialchars($client_name), 'client_list'=>$client_list, 'time'=>date('Y-m-d H:i:s'));
            $client_id_array = array_keys($all_clients);
            Gateway::sendToAll(WebSocket::encode(json_encode($new_message)), $client_id_array);

Gateway::sendToAll第二個(gè)參數(shù)就是寫(xiě)的不同客戶(hù)端與服務(wù)端的鏈接字的數(shù)組 只發(fā)送給這些客戶(hù)端哦~

下面說(shuō)下私聊
// 私聊
Gateway::sendToClient($message_data, WebSocket::encode(json_encode($new_message)));

  這個(gè)是發(fā)給1個(gè)客戶(hù)端的方法 (比方說(shuō)你發(fā)給11客戶(hù)端)
  $message_data 這個(gè)寫(xiě)客戶(hù)端與服務(wù)端連接字

  //發(fā)給當(dāng)前客戶(hù)端      (發(fā)給自己)
  Gateway::sendToCurrentClient(WebSocket::encode(json_encode($new_message)));

寫(xiě)完了 其他也沒(méi)什么好說(shuō)的 還是那句話 有問(wèn)題直接留言

7639 1 0
1個(gè)回答

walkor 打賞

解釋的很好

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??