基於Hyperf,本篇預設已閱讀並理解Socket.io章節
獲取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 協議》,轉載必須註明作者和本文連結