美文网首页PHP开发PHP经验分享
SWOOLE开发实时聊天系统(九)收发消息的开发

SWOOLE开发实时聊天系统(九)收发消息的开发

作者: 公式般欢笑 | 来源:发表于2020-03-12 00:26 被阅读0次

    在用户订阅之后,我们就可以给用户发消息了,只要有用户向服务器发送了消息,就推送给其他所有用户。
    首先,我们需要在messageController中判断用户发送消息的类型,即 type=message.
    然后我们需要拼凑消息的数组,使用上一节中的数组即可。
    最后,我们通过之前定义的给所有用户发消息的方法,来将消息发送到所有用户,就可以了。
    具体代码如下:

    case 'message':
        $msgService=new MessageService();
        $data=$msgService->getMessageContent($data,1);
        $fds = UserService::getFdByGroup($data['first_topic'], $data['second_topic']);
        $pushToAll=new PushToAllMessage($this->server,$data,$fds);
        $msgService->addPushObServer($pushToAll);
        $msgService->notify();
        break;
    

    我们依然需要一个入库和过滤的操作,这个操作可以在getMessageContent这个方法中给出。

    <?php
    namespace app\services;
    use pool\pool;
    use services\UploadService;
    use Swoole\Mysql\Exception;
    /**
     * 消息类,所有的消息都在这里处理
     * Class MessageService
     * @package app\services
     */
    class MessageService extends CommonService
    {
        public function getMessageContent($params, $isComeIn = 0)
        {
            if($isComeIn==0){
                $msg_content="xxx进入了房间";
            }else{
                //TODO 消息敏感词过滤
                //TODO 消息入库
                $msg_content=$params['msg_content'];
            }
            return  [
                'first_topic' => $params['first_topic'],
                'second_topic' => $params['second_topic'],
                'msg_type' => 0,
                'msg_content' => $msg_content,
                'user_id' => $params['user_id'],
            ];
        }
    }
    

    然后我们可以测试一下收发消息的能力:
    测试消息的结构体为:

    {
    "type":"message",
    "first_topic" :1,
    "second_topic" :1,
    "msg_type" :0,
    "msg_content" : "你好",
    "user_id" :1
    }
    

    我们在10086和10087两个用户都订阅以后,用10086的用户发送消息,可以看到

    10086.png 10087.png

    当前组中的所有用户都已经收到了消息。
    因此,这个聊天室就算完成了。

    相关文章

      网友评论

        本文标题:SWOOLE开发实时聊天系统(九)收发消息的开发

        本文链接:https://www.haomeiwen.com/subject/fwpcdhtx.html