建群,加群,群聊

基于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();
    $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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!