php+websocket实现在线聊天室(二)

本文是php+websocket实现在线聊天室的第二部分,详细介绍了如何整理需求、规定消息格式,并通过代码实现聊天室的核心功能,包括消息解析、消息推送、用户匹配和房间管理等。
摘要由CSDN通过智能技术生成

php+websocket实现在线聊天室(一)

上一篇博客我们完成了服务端的基本结构,这一篇博客我们就来把它丰富起来以实现聊天室的功能。

1.整理需求

1.进行三人随机匹配
2.取消匹配
3.发送消息
4.离开房间
5.获取当前在线人数

2.规定消息格式

我们使用json来传递数据

客户端

{
    'type' //0 进行匹配 1 取消匹配 2 发送消息 3离开房间
    'data':{
        'room_id'
        'msg'
   }
}
主要是type字段,data字段是可选的

服务端

{
    'type' //1 匹配成功 2 有人发消息 3 匹配需要等待 4普通消息推送(有人离开) 5普通消息(取消匹配成功) 6 在线人数通知
    'data':{
        'room_id'
        'msg'
   }
}
主要是type字段,data字段是可选的

3.代码实现

我们主要做的事就是解析客户端的消息,然后根据不同的type执行不同的函数

首先给WebsocketServer类添加两个新的变量

private $chat_rooms;//所有聊天室
private $wait_users;//等待匹配的用户

然后我们需要一个给同一个聊天室里的人推送消息的函数,和给所用客户端推送消息的函数用来推送在线人数

//同一个聊天室里的用户 广播消息
    private function push_msg_for_room($room_id,$msg,$c_socket=null){
   
        if($c_socket){
            // 当前用户存在 只把消息推送给其他两个人
            $msg=$this->msg_encode(json_encode($msg));
            foreach ($this->chat_rooms[$room_id] as $user){
                if($user!=$c_socket){
                    socket_write($user,$msg,strlen($msg));
                }
            }
        }else{
            //将消息推送给所有人
            $type=$msg['type'];
            if($type==1){
                //匹配成功消息推送
                //随机三个用户信息
                $usersinfo=$this->get_3_role();
                foreach ($this->chat_rooms[$room_id] as $k=>$user){
                    $data=array(
                        
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值