介绍swoole异步群发模板消息

介绍swoole异步群发模板消息

1、用的是TP5.1的框架,swoole分成一个客户端发送接收消息,一个服务器负责处理信息

  服务端代码,服务器要先安装swoole拓展,用 php server.php 启动进程监听

推荐(免费):swoole

AiPPT模板广场 AiPPT模板广场

AiPPT模板广场-PPT模板-word文档模板-excel表格模板

AiPPT模板广场 147 查看详情 AiPPT模板广场

run()->send();//require_once __DIR__ . '/../../../thinkphp/helper.php';use thinkcachedriverRedis;//use thinkController;use thinkDb;class Swoole{    const errcode = array(        43004 => '需要接收者关注',        40037 => '无效模板',        40003 => '需要接收者关注',        43005 => '需要好友关系',        43019 => '需要将接收者从黑名单中移除',        44001 => '多媒体文件为空',        44002 => 'POST 的数据包为空',        44003 => '图文消息内容为空',        44004 => '文本消息内容为空',        45001 => '多媒体文件大小超过限制',        45002 => '消息内容超过限制',        45003 => '标题字段超过限制',        45004 => '描述字段超过限制',        45005 => '链接字段超过限制',        45006 => '图片链接字段超过限制',        45007 => '语音播放时间超过限制',        45008 => '图文消息超过限制',        45009 => '接口调用超过限制',        45010 => '创建菜单个数超过限制',        45011 => 'API 调用太频繁,请稍候再试',    );    private $serv;    private $redis;    private $conn = [        // 数据库类型        'type'            => 'mysql',        // 服务器地址        'hostname'        => '',        // 数据库名        'database'        => '',        // 用户名        'username'        => '',        // 密码        'password'        => '',        // 端口        'hostport'        => '3306',        // 连接dsn        'dsn'             => '',        // 数据库连接参数        'params'          => [],        // 数据库编码默认采用utf8        'charset'         => 'utf8',        // 数据库表前缀        'prefix'          => 'shd_',        // 数据库调试模式        'debug'           => true,        // 数据集返回类型        'resultset_type'  => 'array',        // 自动写入时间戳字段        'auto_timestamp'  => false,        // 时间字段取出后的默认时间格式        'datetime_format' => 'Y-m-d H:i:s',        // 是否需要进行SQL性能分析        'sql_explain'     => false,        // Builder类        'builder'         => '',        // Query类        'query'           => 'thinkdbQuery',        // 是否需要断线重连        'break_reconnect' => false,        // 断线标识字符串        'break_match_str' => [],    ];    //初始化配置,监听端口    public function __construct()    {        //redis        $this->redis = new Redis();        $this->serv = new swoole_server("0.0.0.0", 9501);        $this->serv->set(array(            'worker_num' => 2, //一般设置为服务器CPU数的1-4倍            'daemonize' => 1, //以守护进程执行            'max_request' => 10000,            'dispatch_mode' => 2,            'task_worker_num' => 8, //task进程的数量            "task_ipc_mode " => 3, //使用消息队列通信,并设置为争抢模式            "log_file" => "taskqueueu.log" ,//日志        ));        $this->serv->on('Receive', array($this, 'onReceive'));        // bind callback        $this->serv->on('Task', array($this, 'onTask'));        $this->serv->on('Finish', array($this, 'onFinish'));        $this->serv->start();    }       //接收客户端的请求并响应    public function onReceive(swoole_server $serv, $fd, $from_id, $data)    {        echo "Get Message From Client {$fd}:{$data}";        $serv->send($fd, '发送任务已建立,正在发送,请稍后查看发送记录');        // send a task to task worker.        $serv->task($data);//投递任务    }    public function onTask($serv, $task_id, $from_id, $data)    {        echo "Task {$task_id} task";        $array = json_decode($data, true);       $success = 0;        $fail = 0;        $log = '';        $access_token = $array['access_token'];        $openid_list = $this->redis->sMembers($array['appid'].'users');//从redis取出要批量发送的openid        $fields = json_decode($array['data'],true);        $send_data = array();               $start = time();        //模板消息        foreach ($openid_list as $openid) {            $template = array(                'touser' => $openid,                'template_id' => $array['tem_id'],                'url' => $array['url'],                'topcolor' => "#000000",                'data' => $send_data,            );            $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $access_token;            $res = $this->send_post($url, $template);            $res_arr = json_decode($res, true);            if ($res_arr['errcode'] == 0){                ++ $success;            }else{                ++ $fail;                $log = self::errcode[$res_arr['errcode']];            }        }        $result = array('success'=>$success,'fail'=>$fail,'tem_id'=>$array['tem_id'],'uid'=>$array['uid'],'data'=>$array['data'],'url'=>$array['url'],'log'=>$log,'start'=>$start);        return json_encode($result);    }    //任务执行完自动回调结束方法    public function onFinish($serv, $task_id, $data)    {        $array = json_decode($data,true);        $fields = json_decode($array['data'],true);        //获取当前模板        $list =  Db::connect($this->conn)->name('wechat_template')->where('template_id',$array['tem_id'])->where('uid',$array['uid'])->find();        $new_field = $list['field'];                $insert['template_id'] = $array['tem_id'];        $insert['success'] = $array['success'];        $insert['fail'] = $array['fail'];        $insert['url'] = $array['url'];        $insert['log'] = $array['log'];        $insert['create_time'] = date('Y-m-d H:i:s',$array['start']);        $insert['finish_time'] = date('Y-m-d H:i:s');        Db::connect($this->conn)->name('wechat_template_log')->insert($insert);        echo "Task{$data} {$task_id} finish";    }    function send_post($url, $post_data) {        $postdata=json_encode($post_data,JSON_UNESCAPED_UNICODE);        $options = array(            'http' => array(                'method' => 'POST',                'header' => 'Content-type:application/x-www-form-urlencoded',                'content' => $postdata,//            'protocol_version' => 1.1,//            'header' => [//                'Connection: close',//            ],                'timeout' => 2 // 超时时间(单位:s)            )        );        $context = stream_context_create($options);        $result = file_get_contents($url, false, $context);        return $result;    }}$server = new Swoole();

2、客户端请求,可以通过api访问

function send_tem_to(){        $type = input('type'); // 0 按人头算 1 按标签算 2 全部粉丝        $target = input('target/s');        $field = input('fields/s');        $tem_id = input('tem_id');//模板ID,字符串        $url = input('url','');        $client = new swoole_client(SWOOLE_SOCK_TCP);//创建同步TCP        if (!$client->connect('127.0.0.1', 9501, 0.5))//链接        {            exit("connect failed. Error: {$client->errCode}");        }            $client->send(json_encode(array('appid'=>$this->appid,'uid'=>$this->uid,'tem_id'=>$tem_id,'data'=>$field))); //发送请求            $rec = $client->recv();//接收返回数据            $client->close();//关闭链接            }

以上就是介绍swoole异步群发模板消息的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/232178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
电脑怎么取消开机密码?
上一篇 2025年11月3日 21:34:01
Spring Boot多数据源JPA配置与原生查询实践
下一篇 2025年11月3日 21:34:03

相关推荐

  • swoole是异步的吗

    swoole是异步的吗swoole是异步的吗swoole是异步的吗swoole是异步的吗

    swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。  Swoole内置了Http/WebSoc…

    2026年9月24日 用户投稿
    100
  • swoole协程怎么开启

    swoole协程怎么开启swoole协程怎么开启swoole协程怎么开启swoole协程怎么开启

    Swoole 2.0正式版发布了。2.0版本最大的更新是增加了对协程(Coroutine)的支持。正式版已同时支持PHP5和PHP7。 基于Swoole2.0协程PHP开发者可以已同步的方式编写代码,底层自动进行协程调度,转变为异步IO。 解决了传统异步编程嵌套回调的问题。    (推荐学习: sw…

    2026年9月24日 用户投稿
    000
  • swoole应用于什么

    swoole应用于什么swoole应用于什么swoole应用于什么swoole应用于什么

    Swoole可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。 Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需…

    2026年9月24日 用户投稿
    100
  • swoole用来解决php什么问题

    swoole用来解决php什么问题swoole用来解决php什么问题swoole用来解决php什么问题swoole用来解决php什么问题

    swoole是一个用C写的php扩展,实现了网络层的很多功能        (推荐学习: swoole视频教程) 实际上作为一名PHP程序员,我很清楚PHP的确有很多局限性,比如Unix系统编程、网络通信编程、异步io,大部分PHPer不懂。PHP界也确实没有这样的东西。Swoole开源项目就是为了…

    2026年9月24日 用户投稿
    100
  • 如何利用Swoole实现高性能RPC框架

    随着互联网行业的迅速发展,越来越多的应用变得复杂,并需要处理大量的并发请求。传统的rpc框架在处理高并发场景时表现不佳,而swoole作为一种协程网络通信引擎,可以帮助开发者实现高性能的rpc框架。那么如何利用swoole实现高性能rpc框架呢? 一、RPC原理简介 RPC(Remote Proce…

    用户投稿 2026年9月24日
    000
  • Swoole如何支持高性能的点对点通信

    随着互联网的不断发展,人们对于实时性和高并发的需求日趋增加。在这样的环境下,swoole的出现带来了一种新的解决方案,使得程序员们能够更好地支持高性能的点对点通信。 一、 Swoole的优势和特点 Swoole是一个基于PHP语言开发的高性能网络通信框架,它的优势和特点主要有以下几点: 强大的异步I…

    用户投稿 2026年9月24日
    000
  • Swoole如何支持异步AMQP操作

    随着互联网业务量的不断增长,对于高并发和高性能的需求越来越高,而swoole作为php的一款网络通信框架,也越来越受到开发者的青睐。其中,swoole支持异步amqp是比较常见的应用场景之一。那么我们来看看swoole如何支持异步amqp操作。 首先,我们需要明确什么是AMQP。AMQP(Advan…

    用户投稿 2026年9月24日
    000
  • Swoole如何实现高性能的SSL代理服务

    随着网络安全的重要性日益凸显,越来越多的网站需要使用ssl/tls加密来保护用户数据的安全。然而,使用ssl/tls加密的网站在传输数据时会增加很大的开销,影响网站的性能和响应速度。为了解决这个问题,我们可以用swoole来实现高性能的ssl代理服务。 Swoole是一款基于PHP语言开发的高性能异…

    用户投稿 2026年9月24日
    000
  • 如何在Swoole中使用协程实现高并发的swoole_ftp函数

    随着互联网技术的快速发展,越来越多的应用场景涌现出来,而高并发的处理方式也成为了现代应用开发的重要课题之一。在swoole中,协程的出现,为高并发的解决方案提供了更多的可能性。本文将介绍如何在swoole中使用协程实现高并发的swoole_ftp函数。 一、Swoole协程的优势 Swoole 协程…

    用户投稿 2026年9月24日
    400
  • Swoole如何支持异步HTTP/2连接

    http/2是一种新的协议,它提供了更快的速度和更强的性能,从而使web更加高效。在http/2中,一次连接可以支持多个并行请求和响应,这就是“多路复用”。swoole是基于php的异步并发编程框架,它可以支持异步http/2连接。本文将介绍swoole如何支持异步http/2连接。 HTTP/2的…

    用户投稿 2026年9月24日
    000
  • 如何利用Swoole实现分布式事务管理

    随着互联网业务的不断发展,单机服务已经无法满足大量并发请求的需求,分布式系统得到了广泛应用。但在分布式系统中,业务所涉及的数据通常分布在多个节点上,由不同的服务处理,这就使得事务管理非常困难。而swoole是一个高性能网络通信框架,可以帮助我们实现分布式事务。 一、理解分布式事务 分布式事务是指一个…

    用户投稿 2026年9月23日
    000
  • Swoole如何使用协程实现高性能的数据分析处理

    随着互联网数据的爆炸式增长,数据分析处理已经成为了各大互联网企业日常工作的重要组成部分。在这个过程中,如何实现高性能的数据处理成为了一个关键问题。swoole 是一个基于 php 语言的高性能网络通信框架,它提供了协程的编程模型,可以很好地解决数据处理中的高并发、高负载、高性能等问题。本文将介绍 s…

    用户投稿 2026年9月23日
    200
  • Swoole如何实现TCP代理服务的负载均衡

    swoole是一个基于php语言扩展开发的高性能网络通信框架,它通过异步、协程等特性,提升了php应用的性能和并发能力。在实际项目中,我们常常需要将tcp代理服务部署在多台服务器上,实现服务的负载均衡。本文将介绍swoole如何实现tcp代理服务的负载均衡。 首先,需要明确TCP代理服务的架构。通常…

    用户投稿 2026年9月23日
    100
  • Swoole如何实现高性能的IM层

    随着互联网的发展,即时通讯(im)已经成为人们日常生活中必不可少的一环。如何实现高性能的im层成为了现代网络技术中的热门话题。在这个领域,swoole作为一个优秀的php扩展,提供了高性能、低成本的解决方案。 本文将分享Swoole如何实现高性能的IM层,从以下几个方面进行分析: Swoole的基本…

    用户投稿 2026年9月23日
    100
  • 如何利用Swoole实现高性能的JSONRPC服务

    在网络开发中,rpc(remote procedure call)是一种常见的通信协议,它允许远程程序之间的相互调用,从而实现分布式的应用程序。近年来,随着php生态发展的不断成熟,在php语言上实现高性能rpc的需求变得越来越强烈,swoole作为php扩展,提供了异步、并发、高性能的网络通信能力…

    用户投稿 2026年9月23日
    200
  • 如何利用Swoole实现高性能的分布式缓存系统

    随着互联网的快速发展,高性能的分布式缓存系统成为了现代应用开发的重要组成部分。而swoole作为一款高性能网络通信框架,能够承接并发访问、实现高性能和高并发需求。在本篇文章中,我们将介绍如何利用swoole来构建高性能的分布式缓存系统。 一、什么是分布式缓存系统 在我们深入了解如何利用Swoole构…

    用户投稿 2026年9月23日
    000
  • Swoole如何支持高性能的图片处理

    随着互联网的普及,图片已经成为了现代网站开发中不可或缺的一部分。而在高访问量的网站中,如何快速高效地处理大量的图片请求成为了一个非常重要的问题。swoole是一个支持高性能的php框架,能够有效地解决这个问题。 Swoole是一款基于C语言开发的PHP扩展,它提供了诸多高性能的网络、并发和异步IO操…

    用户投稿 2026年9月23日
    100
  • Swoole如何支持异步SSH操作

    swoole是一个为高并发而设计的php扩展,可以大幅提升php的性能。它支持异步io、协程、多进程等特性,在网络编程、高负载场景中表现出色。本文将介绍swoole如何支持异步ssh操作。 一、SSH介绍 SSH(Secure Shell)是一种加密的网络协议,用来在网络中进行安全地传输信息。SSH…

    用户投稿 2026年9月23日
    100
  • 如何在Swoole中实现高并发的文件下载

    随着互联网的迅速发展,大数据时代的到来,高并发的应用越来越普遍,文件下载也不例外。在swoole中实现高并发的文件下载相对传统方法,更具有优势。 Swoole是PHP语言的一个协程高性能网络通信引擎,可以在PHP中提供协程、异步IO、多进程等高级特性,支持HTTP/WebSocket/TCP/UDP…

    用户投稿 2026年9月23日
    300
  • 如何利用Swoole实现任务队列系统

    随着互联网的不断发展,许多企业需要处理大量的并发请求,这时就需要消息队列系统来协助任务的处理。swoole作为一款常用的php扩展,可以提供高性能的网络通信能力,同时也支持协程和异步编程。在本文中,我们将介绍如何利用swoole来实现任务队列系统。 一、任务队列概述 任务队列,也称为消息队列,是一种…

    用户投稿 2026年9月23日
    100

发表回复

登录后才能评论
关注微信