redis 发布订阅实现异步实时发短信

Posted 东歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis 发布订阅实现异步实时发短信相关的知识,希望对你有一定的参考价值。

redis 中发布和订阅可以实现消息的实时传输,这里我只是用它的事件驱动,当客户端发送了消息,服务器端立马可以接收指令处理相应的业务逻辑。

客户端

client.php

<?php
//发布
$redis = new Redis();
$redis->connect(‘11.10.1.121‘, 6379);
$message = ‘send msg‘;
#将手机号存放到队列中
$redis->lPush("phone", "15013028236"); $ret = $redis->publish(‘subscribe‘, $message);

 

服务器端

server.php

<?php
//订阅端 常驻进程
ini_set(‘default_socket_timeout‘, -1); //不超时
$redis = new Redis();
$redis->connect(‘11.10.1.121‘, 6379);
$result = $redis->subscribe(array(‘subscribe‘), ‘callback‘);

function callback($instance, $channelName, $message) {
    # 回调函数内只能使用 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE 4 条命令
    # 事件驱动 接到信息后执行业务逻辑 如 发送短信 、邮件等

    //请求接口 接口完成发送短信、邮件业务逻辑
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, ‘http://www.layui.test/home/article/attrJob‘);
    curl_setopt($curl, CURLOPT_HEADER, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    echo curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);
}

 

发送短信示例代码

public function attrJob(){
    //示例代码
    $redis = new Redis();
    $redis->connect(‘11.10.1.121‘, 6379);
    $phone = $redis->rPop("phone");

    if (!$phone || ctype_digit($phone)) {
        echo json_encode([‘error_code‘ => 1, ‘msg‘ => "s手机号不能为空!"]);
        return;
    }

    #使用短信接口
    echo json_encode([‘error_code‘ => 0, ‘msg‘ => "短信已发送!"]);
}

 

以上是关于redis 发布订阅实现异步实时发短信的主要内容,如果未能解决你的问题,请参考以下文章

redis做消息队列--demo短信发送

Swoole来实现实时异步任务队列

redis消息队列有没有

把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统

SpringBoot @Async 异步处理业务逻辑和发短信逻辑

php+redis实现消息队列