建群,加群,群聊
基于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();
$socket->join(...array_column($rooms->toArray(), '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 协议》,转载必须注明作者和本文链接