聚宝盆/gotask

Go语言的Swoole TaskWorker替代品

维护者

详细信息

gitee.com/jufubao/gotask.git

1.0.6 2022-11-04 02:48 UTC

This package is not auto-updated.

Last update: 2024-09-18 16:30:51 UTC


README

英文 | 中文

Build Status

GoTask会启动一个Go进程作为Swoole的边车,并建立双向IPC,以便将重任务卸载到Go。将其视为Go中的Swoole Taskworker。

composer require hyperf/gotask

特性

  • 高性能,占用空间小。
  • 基于Swoole 4协程socket API。
  • 支持Unix Socket、TCP和stdin/stdout管道。
  • 支持PHP到Go和Go到PHP的调用。
  • 自动管理边车生命周期。
  • 正确处理远程错误。
  • 支持结构化负载和二进制负载。
  • 边车API与net/rpc兼容。
  • 内置连接池。
  • 可选集成Hyperf框架。

适用于

  • Swoole中的阻塞操作,如MongoDB查询。
  • CPU密集型操作,如编码和解码。
  • 利用Go生态系统,如Kubernetes客户端。

要求

  • PHP 7.2+
  • Go 1.13+
  • Swoole 4.4LTS+
  • Hyperf 1.1+(可选)

任务交付演示

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

贡献