English | 中文
GoTask通过Swoole进程管理功能启动Go进程作为Swoole主进程边车(Sidecar),利用进程通讯将任务投递给边车处理并接收返回值。可以理解为Go版的Swoole TaskWorker。
composer require hyperf/gotask
- 超高速低消耗
- Co/Socket实现,100%协程化
- 支持Unix Socket、TCP、stdin/stdout管道
- PHP与Go双向通讯
- 边车自动启停
- 支持远程异常捕获
- 支持结构化数据、二进制数据投递
- go边车兼容net/rpc
- 自带连接池支持
- 可独立使用,也可深度融合Hyperf
- 执行阻塞函数,如MongoDB查询
- 执行CPU密集操作,如编码解码
- 接入Go语言生态,如Kubernetes
- PHP 7.2+
- Go 1.13+
- Swoole 4.4LTS+
- Hyperf 1.1+ (optional)
package main
import (
"github.com/hyperf/gotask/v2/pkg/gotask"
)
type App struct{}
func (a *App) Hi(name string, r *interface{}) error {
*r = map[string]string{
"hello": name,
}
return nil
}
func main() {
gotask.SetAddress("127.0.0.1:6001")
gotask.Register(new(App))
gotask.Run()
}
<?php
use Hyperf\GoTask\IPC\SocketIPCSender;
use function Swoole\Coroutine\run;
require_once "../vendor/autoload.php";
run(function(){
$task = new SocketIPCSender('127.0.0.1:6001');
var_dump($task->call("App.Hi", "Hyperf"));
// 打印 [ "hello" => "Hyperf" ]
});
https://github.com/reasno/gotask-benchmark
- https://github.com/spiral/goridge 提供了IPC通讯的编码和解码。
- https://github.com/twose 提供了人肉答疑支持。