《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
队列?多线程?
30分钟50万 1秒300条 我觉得有点悬啊
用 curl_multi 并发请求
在我记忆中好像消息模板不能批量发送好像只能单条处理 方案1 队列就是开多个消费进行处理 (fpm) 方案2 swoole 开多个进程 已协程方式跑 父协程下在开多个子协程一起跑
把需要的放入队列,然后开多个脚本一起消费,如果是php的话,这样最容易实现
差不多278条/秒,如果微信不限制的话,这个服务器配置我感觉可以做到的,一个是你可以用多线程发送,二十微信也支持同时发多个用户,类似于
"touser" : "UserID1|UserID2|UserID3"
,这样下来效率就提高很多了用swoole或者go的多协程,任务分组,同时进行
会被封
gullze包并发请求呗
我觉得一个进程也能完成,参考一下guzzlehttp的异步请求,内部用的io多路复用,无阻塞,失败的时候给个重试机制,平均一秒277个,只要微信不限制,应该可以推送完成
队列临时多启动一些消费者
不知道大家有用过swoole 的异步任务吗,https://wiki.swoole.com/#/start/start_task?id=%e6%89%a7%e8%a1%8c%e5%bc%82%e6%ad%a5%e4%bb%bb%e5%8a%a1task 我现在就是用的这个,task_worker_num 开了 50个,现在一发服务器cpu就满了。
大批量消息发送要慎重
二、目前不允许发的模板消息
3、发送频率过高,有骚扰用户倾向类消息模板
developers.weixin.qq.com/doc/offia...
push 一次算100毫秒 串行推送是需要一些时间 0.1*500000=50000秒
php这块的话可以用下面的玩意实现
异步任务开50个就没啦 开协程调度会不会快一点(task_enable_coroutine) 用异步任务task_worker_num 应该是fork子线程
用Guzzle开50个线程先看下效果。估计也干不完,你这个配置可能真的做不到,至少得搞个8核或者16核,这样nginx还能优化优化。
可以参考一下官方文档 guzzle-cn.readthedocs.io/zh_CN/lat...
我使用了go+rabbitmq,完成了推送,主要踩了坑:
1.发送时的协程数要控制
2.你发送1条,微信会回调你一条,所以你1秒发1k条,你的nginx+php-fpm能不能支持1k的并发
3.还有你的带宽流量,发送的http包大小
如果用php的话,可以用swoole,不过思想是一样的,不如直接用go
laravel horizon 多开几个进程足矣。
我这里写了一个专门发微信消息模板的服务,可以试下,目前我们已经投入生产使用了
分享创造:一个解耦微信模板消息,并发发送的golang服务
微信模板消息发送次数是有上限的。没这么多
首先,需要先确定服务器是否有足够的 CPU 和内存来处理 50 万条消息。如果服务器性能不足,可能需要更换更强的服务器来满足需求。
其次,可以考虑优化推送程序的性能。有几种常见的优化方法:
批量处理消息,即一次处理多条消息。这可以减少消息处理所需的 I/O 操作和网络请求,提高性能。
使用多线程或多进程,即同时处理多个消息。这可以利用多核 CPU 的优势,提高性能。
使用缓存,即将消息先缓存到内存或磁盘中,然后再进行推送。这可以减少消息处理所需的网络请求和 I/O 操作,提高性能。
使用队列,即将消息放到一个队列中,然后再由后台线程或进程进行推送。这可以将推送过程异步化,提高性能。
总之,如果希望在 30 分钟之内给 50 万用户及时推送微信模板消息通知,可以考虑以上优化方法来提高性能。但是,还要确保服务器性能足够。如果服务器性能不足,需要更换更强的服务器来满足需求。
我觉得瓶颈不是你这里,而是微信接口吧,能承受多少并发量。