swoole game server
就是解析$argv这个全局参数,app:start,app:stop,app:reload,app:status
2、初始化设置:如日志目录、临时目录以及pid存放目录
is_dir()
pathinfo()
file_exists()
mkdir()
3、注册全局的错误处理函数、异常处理函数和应用关闭函数、日志处理、配置文件处理
set_error_handle()
set_exception_handle()
register_shutdown_function()
4、解析配置文件,注册相关回调函数
加载对应的配置文件,注册相关事件回调函数
5、添加自定义进程
启动server前,添加自定义进程
6、添加自定义任务
任务可以是匿名函数或者一个类
7、启动|关闭|重启 server
php bin/server app:start
php bin/server app:stop
php bin/server app:reload
php bin/server app:status
swoole websocket server
启动: php bin/server app:start
停止: php bin/server app:stop
重启: php bin/server app:reload
todo: php bin/server app:status
发送命令:{"c":"命令,注解定义" , "d":{请求参数}}
eg:{"c":1 ,"d":{"id":1}}
websocket类需继承 |gs\WebsocketController,可以使用 `$this->request->getParam()`获取参数,使用 $this->getUid()获取绑定的UID
1、协程http请求
2、协程webscoket
3、异步、同步 单|多task,支持闭包
4、自定义进程
5、redis、db连接池
6、多语种
7、注解路由、注解task、注解进程、注解websocket命令
异步任务,必须设置onfinish回调,返回task_worker_id
$name: 可以是定义的task任务名,使用Task注解的name属性定义;也可以是一个闭包函数
$data: 调用任务类的handle方法的参数列表;调用闭包的参数列表
$taskWorkerId: 指定到哪个task worker执行
同步任务,必须设置onfinish回调,返回task_worker_id
$name: 可以是定义的task任务名,使用Task注解的name属性定义;也可以是一个闭包函数
$data: 调用任务类的handle方法的参数列表;调用闭包的参数列表
$taskWorkerId: 指定到哪个task worker执行
并发执行多个task异步任务
$name: [ ['任务名|匿名函数', [参数列表] ]
必须是一个数组,数组有且只有两个元素,第一个元素必须为任务名或者匿名函数,第二个元素必须为参数列表数组
并发执行Task并进行协程调度 ,任务完成或超时,返回结果数组。结果数组中每个任务结果的顺序与$tasks对应,某个任务执行失败或超时,对应的结果数组项为false
$name: [ ['任务名|匿名函数', [参数列表] ]
必须是一个数组,每个元素是一个数组,每个数组有且只有两个元素,第一个元素必须为任务名或者匿名函数,第二个元素必须为参数列表数组
使用注解定义task
必须设置
handle静态方法
,使用名字来调用时,task进程就是调用该静态方法
```php
<?php
namespace app\task;
use gs\annotation\Task;
/**
}
var_dump($hi);
// 使用
gs\swoole\Task::async(‘test’,[‘hi snailZED!’]);
## 自定义进程
> 自定义进程必须要阻塞运行,比如使用while(true)死循环,否则进程一旦退出了,swoole会自动启动一个新的进程,如此反复。
一般用来做消费者,如rabbitmq消费者,发布订阅模式等等。
- 自定义进程必须使用 `gs\annotation\Process` 注解定义,必须实现接口`interfaces\InterfaceProcess`.
`name`:指定进程名字,必须唯一,`co`:是否为协程运行,默认为true
```php
<?php
namespace app\process;
use gs\annotation\Process;
use interfaces\InterfaceProcess;
use Swoole\WebSocket\Server;
use Swoole\Process as SwooleProcess;
/**
* Class CustomProcess
* @package app\process
* @Process(name="test",co=true)
*/
class CustomProcess implements InterfaceProcess
{
public static function handle(Server $server, SwooleProcess $process)
{
// TODO: Implement handle() method.
while (true) {
var_dump(__METHOD__);
sleep(2);
}
}
}