Swoole实时任务异步调用Demo
server.php
<?php
class Server
{
private $serv;
private $logFilePath = "/data/wwwroot/houtai/Log/taskqueueu.log"; public function __construct()
{
$this->serv = new swoole_server("0.0.0.0", 9515);
$this->serv->set(array(
'worker_num' => 1, //一般设置为服务器CPU数的1-4倍
'daemonize' => 0, //1以守护进程执行,0 ssh的命令行模式
'max_request' => 10000,
'dispatch_mode' => 2,
'task_worker_num' => 8, //task进程的数量,数值越小消耗的时间越长
// "task_ipc_mode " => 3, //使用消息队列通信,并设置为争抢模式
"log_file" => $this->logFilePath ,//日志存放目录
));
$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}\n";
$task_id = $serv->task($data);
$serv->send($fd,$task_id." received "."\n");
} public function onTask($serv, $task_id, $from_id, $data)
{
sleep(10);
//在这里进行脚本执行处理操作
echo $data."\n";
$f = fopen($this->logFilePath,"a+");
$current = date("Ymd H:i:s");
fwrite($f,$current.$data."\n");
fclose($f);
//$serv->finish($task_id." ok "."\n");
return $task_id;
} public function onFinish($serv, $task_id, $data)
{
//任务完成自动调用
$current = date("Ymd H:i:s");
echo $current." ".$task_id." finish"."\n";
} } $server = new Server();
client.php
<?php class Client
{
public $client; public function __construct()
{
$this->client = new swoole_client(SWOOLE_SOCK_TCP);
} public function connect()
{
if (!$this->client->connect("127.0.0.1", 9515, 1)) {
throw new Exception(sprintf('Swoole Error: %s', $this->client->errCode));
}
}
//传输数据
public function send($data)
{
if ($this->client->isConnected()) { return $this->client->send($data);
} else {
throw new Exception('Swoole Server does not connected.');
}
} public function close()
{
$this->client->close();
}
} $data = array(
"params"=>"参数信息"
);
$client = new Client();
$client->connect();
for ($i = 0; $i<10;$i++){
if ($client->send(json_encode($data))) {
echo 'send success'."\n";
} else {
echo 'send fail';
}
$response = $client->client->recv();
if ($response) {
echo $response."\n";
}
} $client->close();
运行方法:
先命令行启动php server.php
后命令行启动php client.php
然后观察客户端的输出+日志的内容。
服务端的task_worker_num设置的数值越小,花费的时间越长。
Swoole实时任务异步调用Demo的更多相关文章
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- Java 多线程异步处理demo
java中实现多线程 1)继承Thread,重写里面的run方法 2)实现runnable接口通过源码发现:第一种方法说是继承Tread然后重写run方法,通过查看run方法的源码,发现run方法里面 ...
- c/c++(hiredis)异步调用redis【转】
hiredis是redis官方推荐的C/C++客户端代码库.使用hiredis库很简易方便的进行redis的相关开发. 同步方式 不过大多数情况下,我们采用的都是同步的调用方式. 1 2 3 4 ...
- Spring异步调用原理及SpringAop拦截器链原理
一.Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTI ...
- SpringBoot中异步请求和异步调用(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...
- springBoot中实现自定义属性配置、实现异步调用、多环境配置
springBoot中其他相关: 1:springBoot中自定义参数: 1-1.自定义属性配置: 在application.properties中除了可以修改默认配置,我们还可以在这配置自定义的属性 ...
- Java 实现异步调用
首先 我遇到的问题是 接口调用时需要更新缓存 而更新缓存又是个说快不快的过程 所以打算做异步调用 返回我所需要的结果即可 ,至于缓存什么时候更新完 就不是我所需要关注的了 废话不多说 上代码 publ ...
- 5种必会的Java异步调用转同步的方法你会几种
转载请注明本文地址:https://www.jianshu.com/p/f00aa6f66281 源码地址:https://gitee.com/sunnymore/asyncToSync Sunny先 ...
- 9.4 dubbo异步调用原理
9.1 客户端发起请求源码.9.2 服务端接收请求消息并发送响应消息源码.9.3 客户端接收响应信息(异步转同步的实现) 分析了dubbo同步调用的源码,现在来看一下dubbo异步调用. 一.使用方式 ...
随机推荐
- Mybatis源码学习第七天(插件源码分析)
为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装 ...
- Pycharm 激活插件与码
Pycharm2020最新永久激活码插件(支持Windows),100%永久激活 用到pycharm工具发现没用多久时间又过期了,在网上有看到很多朋友都遇到同样的情况,于是找到了一批很不错的永久激活方 ...
- springboot入门遇到Whitelabel Error Page错误
错误页面: 解决方法: 启动类要放在最外层,改成下面的
- jdk1.8 时间工具类,可以满足基本操作
时间工具类 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final S ...
- input历史快捷-变黄解决
一: <form action="loginAction" method="post" autocomplete="off">给 ...
- appium多线程自动化
基于上篇讲述的appium自动启动停止.测试服务.对controller文件进行相应的修改 1.首先对start_server函数,应采用多线程模式启动多个server,如下 其中启动的每个线程函数s ...
- Android组件化 + MVP + MVVM
前言 组件化和插件化已经提出了很久了,到现在也是比较稳定的一种架构方案了,在三年前,组件化和插件提出来没多久,前公司就已经在项目中使用了,只是当时还只是菜鸟,没有资格参与到架构的建设中,只是在大佬搭好 ...
- 不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
本来想系统回顾下 ZooKeeper的,可是网上没找到一篇合自己胃口的文章,写的差不多的,感觉大部分都是基于<从Paxos到ZooKeeper 分布式一致性原理与实践>写的,所以自己读了一 ...
- PHP面试总结(转)
PHP面试总结 从8月15号来到北京一直到今天,一月有余.来的这段时间一直准备笔试面试,大大小小的公司,乱七八糟面了10多家,近期才安顿下来.面试的这段时间感觉自己成长了不少.初来到这个陌生的城市 ...
- [LeetCode]230. 二叉搜索树中第K小的元素(BST)(中序遍历)、530. 二叉搜索树的最小绝对差(BST)(中序遍历)
题目230. 二叉搜索树中第K小的元素 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 题解 中序遍历BST,得到有序序列,返回有序序列的k-1号元素. 代 ...