Workerman學習(以thinkphp5爲例)

workerman簡單實現步驟:php

        將下載的Gateway版本放在vendor裏面,json

        再打開start_for_win.bat以後,在Events.php文件中OnConnect()中,sendToClient()函數是  向客戶端client_id發送$send_data數據。若是client_id對應的客戶端不存在或者不在線則自動丟棄發送數據。服務器

public static function onConnect($client_id)
{
    // 向當前client_id發送數據
    // Gateway::sendToClient($client_id, "Hello $client_id\r\n");
    // 向全部人發送
    // Gateway::sendToAll("$client_id login\r\n");

    //將消息發送給指定的聊天對象 => 當前client_id
    Gateway::sendToClient($client_id,json_encode([
        'type'=>'init',
        'client_id'=>$client_id,
    ]));
}

在聊天頁面的js裏面:socket

console.log以後會發現函數

Client_id是workerman系統自動生成的聊天者的id,這就表明創建最基本的通訊成功ui

Js在判斷到收到message以後,用switch判斷message的type類型,達到分辨信息類型的步驟3d

ws.send()做用是將數據發送給socket服務器(在Events.php裏面接收)code

 bindUid()是將client_id與uid綁定,以便經過Gateway::sendToUid($uid)發送數據,視頻

經過Gateway::isUidOnline($uid)用戶是否在線。uid解釋:這裏uid泛指用戶id或者設備id,用來惟一肯定一個客戶端用戶或者設備htm

點擊發送按鈕處理邏輯:

Message結合內容(fromid和toid,data表示用戶發送的信息,type表明發送信息的類型等信息)

當返回類型是say,表示接收到了發送的type類型爲say類型的信息,

sendToUid()表示:向uid綁定的全部在線client_id發送數據。

isUidOnline()表示:判斷$uid是否在線,此方法須要配合Gateway::bindUid($client_uid, $uid)使用 

至此,一個簡單的發送文字的簡單通訊步驟就完成了~

參考網易雲課堂視頻連接:https://study.163.com/course/courseMain.htm?courseId=1005015012

相關文章
相關標籤/搜索