Skip to content

Latest commit

 

History

History
95 lines (68 loc) · 2.3 KB

README-CN.md

File metadata and controls

95 lines (68 loc) · 2.3 KB

GoTask

English | 中文

Build Status

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" ]
});

文档

Benchmark

https://github.com/reasno/gotask-benchmark

鸣谢