PHP开发PHP经验分享

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

2020-03-12  本文已影响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

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

上一篇 下一篇

猜你喜欢

热点阅读