bain2018/gotask

Go语言中Swoole TaskWorker的替代品,升级到hyperf3.1

v3.1.1 2023-12-15 04:18 UTC

This package is auto-updated.

Last update: 2024-09-15 06:20:23 UTC


README

英语 | 中文

Build Status

GoTask作为Swoole的侧车启动一个Go进程,并建立一个双向IPC来卸载重任务。可以将其视为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

致谢