初始化
This commit is contained in:
139
README.md
139
README.md
@@ -1,2 +1,139 @@
|
||||
# think-worker
|
||||
ThinkPHP Workerman 扩展
|
||||
===============
|
||||
|
||||
交流群:981069000 [](https://qm.qq.com/q/A8YNpzrzC8)
|
||||
|
||||
## 安装
|
||||
```
|
||||
composer require topthink/think-worker
|
||||
```
|
||||
|
||||
## 说明
|
||||
> 由于windows下无法在一个文件里启动多个worker,所以本扩展不支持windows平台
|
||||
|
||||
## 使用方法
|
||||
|
||||
### HttpServer
|
||||
|
||||
在命令行启动服务端
|
||||
~~~
|
||||
php think worker
|
||||
~~~
|
||||
|
||||
然后就可以通过浏览器直接访问当前应用
|
||||
|
||||
~~~
|
||||
http://localhost:8080
|
||||
~~~
|
||||
|
||||
如果需要使用守护进程方式运行,建议使用supervisor来管理进程
|
||||
|
||||
## 访问静态文件
|
||||
> 建议使用nginx来支持静态文件访问,也可使用路由输出文件内容,下面是示例,可参照修改
|
||||
1. 添加静态文件路由:
|
||||
|
||||
```php
|
||||
Route::get('static/:path', function (string $path) {
|
||||
$filename = public_path() . $path;
|
||||
return new \think\worker\response\File($filename);
|
||||
})->pattern(['path' => '.*\.\w+$']);
|
||||
```
|
||||
|
||||
2. 访问路由 `http://localhost/static/文件路径`
|
||||
|
||||
## 队列支持
|
||||
|
||||
使用方法见 [think-queue](https://github.com/top-think/think-queue)
|
||||
|
||||
以下配置代替think-queue里的最后一步:`监听任务并执行`,无需另外起进程执行队列
|
||||
|
||||
```php
|
||||
return [
|
||||
// ...
|
||||
'queue' => [
|
||||
'enable' => true,
|
||||
//键名是队列名称
|
||||
'workers' => [
|
||||
//下面参数是不设置时的默认配置
|
||||
'default' => [
|
||||
'delay' => 0,
|
||||
'sleep' => 3,
|
||||
'tries' => 0,
|
||||
'timeout' => 60,
|
||||
'worker_num' => 1,
|
||||
],
|
||||
//使用@符号后面可指定队列使用驱动
|
||||
'default@connection' => [
|
||||
//此处可不设置任何参数,使用上面的默认配置
|
||||
],
|
||||
],
|
||||
],
|
||||
// ...
|
||||
];
|
||||
|
||||
```
|
||||
|
||||
### websocket
|
||||
|
||||
> 使用路由调度的方式,可以让不同路径的websocket服务响应不同的事件
|
||||
|
||||
#### 配置
|
||||
|
||||
```
|
||||
worker.websocket = true 时开启
|
||||
```
|
||||
|
||||
#### 路由定义
|
||||
```php
|
||||
Route::get('path1','controller/action1');
|
||||
Route::get('path2','controller/action2');
|
||||
```
|
||||
|
||||
#### 控制器
|
||||
|
||||
```php
|
||||
use \think\worker\Websocket;
|
||||
use \think\worker\websocket\Frame;
|
||||
|
||||
class Controller {
|
||||
|
||||
public function action1(){
|
||||
|
||||
return (new \think\worker\response\Websocket())
|
||||
->onOpen(...)
|
||||
->onMessage(function(Websocket $websocket, Frame $frame){
|
||||
...
|
||||
})
|
||||
->onClose(...);
|
||||
}
|
||||
|
||||
public function action2(){
|
||||
|
||||
return (new \think\worker\response\Websocket())
|
||||
->onOpen(...)
|
||||
->onMessage(function(Websocket $websocket, Frame $frame){
|
||||
...
|
||||
})
|
||||
->onClose(...);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 自定义worker
|
||||
监听`worker.init`事件 注入`Manager`对象,调用addWorker方法添加
|
||||
~~~php
|
||||
use think\worker\Manager;
|
||||
use \think\worker\Worker;
|
||||
|
||||
//...
|
||||
|
||||
public function handle(Manager $manager){
|
||||
$worker = $manager->addWorker(function(Worker $worker){
|
||||
//..其他回调或处理
|
||||
//动态添加监听可参考 https://www.workerman.net/doc/workerman/worker/listen.html
|
||||
});
|
||||
}
|
||||
|
||||
//...
|
||||
~~~
|
||||
|
||||
Reference in New Issue
Block a user