建群,加群,群聊

php迷途小書童發表於2021-12-20

基於Hyperf,本篇預設已閱讀並理解Socket.io章節

Hyperf Socket.io

獲取user鑑權基於博文

鑑權獲取user

使用者建立連線,加入房間,結合資料庫查詢出加入的所有房間,迴圈加入房間

/**
* @Event("connect")
*/
public function connect(Socket $socket)
{
    $user = $socket->getRequest()->getAttribute('user');
    $rooms = Db::table('room_users')
        ->select('room')
        ->where('user_id', $user->id)
        ->get();
    foreach ($rooms as $room) {
        $socket->join($room->room);
    }
}

向房間內其他使用者發訊息

    /**
     * @Event("say")
     * @param string $data
     */
    public function onSay(Socket $socket, $data)
    {
        $data = Json::decode($data);
        $socket->to($data['room'])->emit('event', $socket->getSid() . " say: {$data['message']}");
    }

使用者斷開連線,系統已處理,不必考慮退出房間問題

使用者斷開連線後,自動呼叫del方法,del 從多個房間中刪除一個 sid。 如果沒有房間
給定,sid 將從所有房間中刪除。

/**
* del removes a sid from multiple rooms. If none of the room is
* given, the sid will be removed from all rooms.
*/
public function del(string $sid, string ...$rooms);
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章