cli模式下执行thinkphp
1、cd 项目根目录
2、php index.php admin/index/index --执行 模块/控制器/方法名

异步消息队列
1、服务器端核心代码

  1. /**
  2. * 脚本任务系统
  3. */
  4. public function server()
  5. {
  6. $serv = new \swoole_server("0.0.0.0", 8082);
  7. //日志会记录你错误的数据
  8. $serv->set(array('task_worker_num' => 20, 'log_file' => './swoole.log'));
  9. $serv->on('Receive', function ($serv, $fd, $from_id, $data) {
  10. $task_id = $serv->task($data);
  11. });
  12.  
  13. //执行任务模块
  14. $serv->on('Task', function ($serv, $task_id, $from_id, $data) {
  15. //1秒执行一次
  16. $num = 0;
  17. $timer_id = $serv->tick(1000, function ($id) use ($serv,$data,$num) {
  18. $url = "http://notify.yingxiaom.top/index.php/admin/index/test";
  19. $result = $this->request_post($url);
  20. if($result == 'SUCCESS'){
  21. echo "1";
  22. file_put_contents("b.txt","1",FILE_APPEND);
  23. $serv->clearTimer($id);
  24. }
  25. });
  26. //10秒后销毁
  27. $serv->after(1000*60*2, function () use ($serv,$timer_id) {
  28. $serv->clearTimer($timer_id);
  29. });
  30. $serv->finish($data);
  31. });
  32. //任务结束
  33. $serv->on('Finish', function ($serv, $task_id, $data) {
  34. echo "AsyncTask[$task_id] Finish: $data" . PHP_EOL;
  35. });
  36. $serv->start();
  37. }
  38.  
  39. /* author@zhou
  40. * 功能:发送数据
  41. * return
  42. */
  43. public function request_post($url ='',$param ='') {
  44. $postUrl = $url;
  45. $curlPost = $param;
  46. $ch = curl_init();//初始化curl
  47. curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
  48. curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
  49. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
  50. curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
  51. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  52. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8','Content-Length: ' . strlen($curlPost)));
  53. curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
  54. curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
  55.  
  56. $data = curl_exec($ch);//运行curl
  57. // var_dump(curl_errno($ch));die;
  58. curl_close($ch);
  59. return $data;
  60. }

 

2、客户端代码

  1. /**
  2. * description:客户端
  3. */
  4. public function client()
  5. {
  6. $phone = I("phone");
  7. $client = new \swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
  8. $ret = $client->connect("127.0.0.1", 8082);
  9. if(empty($ret)){
  10. echo 'error!connect to swoole_server failed';
  11. } else {
  12. if($phone){
  13. $client->send($phone);//手机号
  14. }
  15. echo "SUCCESS";
  16. }
  17. }

 

3、注意事项
定时任务执行接口请求时返回 SUCCESS 清除定时
定时器会在单位时间内统一清除
worker_num 默认为cpu核数 (1-4倍最合理)
task_worker_num设置 每秒最大请求数 * 单个任务耗时(单位s) / worker_num
单个task的处理耗时,如100ms,那一个进程1秒就可以处理1/0.1=10个task
task投递的速度,如每秒产生2000个task
2000/10=200,需要设置task_worker_num => 200,启用200个task进程
通用传参方式:
格式 :function () use ($param1,$param2)
$serv->after(1000*60*2, function () use ($serv,$timer_id) {
$serv->clearTimer($timer_id);
});

 

thinkphp整合swoole的更多相关文章

  1. ThinkPHP 整合Bootstrap Ajax分页

    ThinkPHP Ajax分页代码 publicfunction index() { $where=array(); $name = I('name'); if(!empty($name)){ $wh ...

  2. ThinkPHP整合支付宝担保交易

    ThinkPHP整合支付宝担保交易本代码参考大神 http://www.thinkphp.cn/code/240.html 的思路 1.登陆支付宝后台,下载担保交易的集成包. 2.下载完成后的文件说明 ...

  3. thinkphp整合系列之支付宝RSA加密方式

    thinkphp整合系列之支付宝RSA加密方式上篇博客写的是MD5加密方式:thinkphp整合系列之支付宝MD5加密方式扫码支付http://baijunyao.com/article/75 但是呢 ...

  4. ThinkPHP整合百度Ueditor

    文章来源:http://www.thinkphp.cn/code/267.html ThinkPHP整合百度Ueditor,基于黄永成老师的视频说明的申明:最好大家都能写绝对路径的都写好绝对路径比如: ...

  5. ThinkPHP整合百度Ueditor图文教程

    ThinkPHP整合百度Ueditor图文教程 ThinkPHP整合百度Ueditor,基于黄永成老师的视频说明的申明:最好大家都能写绝对路径的都写好绝对路径比如:window.UEDITOR_HOM ...

  6. thinkphp整合系列之phpexcel生成生成excel文件

    在后台管理中会经常需要将数据生成excel表格的: php生成excel有两种方案: 一种是通过phpexcel生成xls格式的表格文件: 另一种则直接通过逗号换行生成csv格式的表格文件: 这里先讲 ...

  7. thinkphp整合系列之极验滑动验证码

    对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...

  8. Thinkphp整合各个功能

    thinkphp整合Auth权限管理.支付宝.微信支付.阿里oss.友盟推送.融云即时通讯.云通讯短信.Email.Excel.PDF等等: 基于thinkphp扩展了大量的功能:而不改动thinkp ...

  9. YII2与Thinkphp整合阿里云OSS

    前言: 如果上传的文件都和网站程序源代码放在一起:那是有相当多的弊端的: 1:静态文件会占用大量带宽: 2:服务器的成本略高: 常规的做法是把php源代码放到一台服务器上:图片等静态文件放在另一台服务 ...

随机推荐

  1. cocos2d-x 3.0 引用第三方库 及编译成apk时android mk文件写法

    cocos2d-x 3.0 中.假设你须要使用CocosStudio.Extensions扩展库 等等.都须要自己手动加入. 加入过程例如以下:(比方说如今我要加入libExtensions,libC ...

  2. C# Backgroundworker(后台线程)的使用

    namespace BackgroundWorkderPauseSample { public partial class MainForm : Form { BackgroundWorker wor ...

  3. Allegro改动shape网络节点

    使用Allegro时改动shape的网络节点方法: ①选择shape->Select Shape or Void/Cavity ②选择要改动的shape ③点击(...)改动网络节点的名字 ④改 ...

  4. sql select(A.B)拼接

    需要做的工作:把DBtable里边的某两个字段,(当然可以更多)或者不同表,道理类似,用某个符号拼接起来. 比如(Table.A).(Tables.B) oracle里边可以这样写,sql没试: se ...

  5. Simple calculations

    Description 有一个包括n+2个元素的数列a0, a1, ..., an+1 (n <= 3000, -1000 <= ai <=1000).它们之间满足ai = (ai- ...

  6. Linux安装Axis C构建WebService服务

    在安装Axis C++之前有两个组件是必须安装的,分别是Apache HTTP Server以及用于处理XML的程序Xerces:为了编译Axis以及Apache HTTPD,你的Linux机器还应该 ...

  7. JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚

    时隔多日,多日合适吗,应该是时隔多月.我又想起了一般处理程序.这都是由于近期在实现的DRP系统中经经常使用到jsp+servlet达到界面与逻辑的分离.servlet负责处理从jsp传回的信息:每当这 ...

  8. sim的准确识别技术

    几个月钱,我换了一个手机,本着工科男动手能力强的原则,自己用✂️把sim卡剪成了一个小卡,然后成功的可以使用了. 然而就在昨天,我将卡拿出之后,再放回去,却无法识别我的sim卡了. 我上网查了方法,怀 ...

  9. LIS(最长上升子序列)的三种经典求法

    求最长上升子序列的三种经典方案: 给定一个长度为 \(N\) 的数列,求它数值单调递增的子序列长度最大为多少.即已知有数列 \(A\) , \(A=\{A_1,A_2....A_n\}\) ,求 \( ...

  10. OPENCV在ARM平台的移植

    两篇别人推荐给我的文章,我想直接复制过来,呵呵,但一想真不好,等我做一遍了再来写一遍.还是贴链接. OpenCV在ARM上的移植:http://www.cnblogs.com/emouse/archi ...