Skip to content
/ gotask Public
forked from hyperf/gotask

⚡️ A lightning speed replacement for Swoole TaskWorker in Go

License

Notifications You must be signed in to change notification settings

axpwx/gotask

Repository files navigation

GoTask

Build Status

GoTask通过Swoole进程管理功能启动Go进程作为Swoole主进程边车(Sidecar),利用进程通讯 将任务投递给边车处理并接收返回值。可以理解为Go版的Swoole TaskWorker。

composer require reasno/gotask

特性 Feature

  • 超高速低消耗
  • Co/Socket实现,100%协程化
  • 支持Unix Socket、TCP、stdin/stdout管道
  • PHP与Go双向通讯
  • 边车自动启停
  • 支持远程异常捕获
  • 支持结构化数据、二进制数据投递
  • go边车兼容net/rpc
  • 自带连接池支持
  • 可独立使用,也可深度融合Hyperf

使用场景 Perfect For

  • 执行阻塞函数,如MongoDB查询
  • 执行CPU密集操作,如编码解码
  • 接入Go语言生态,如Kubernetes

requirement

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

消息投递Demo

package main

import (
	"github.com/reasno/gotask/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 Reasno\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", "Reasno"));
    // 打印 [ "hello" => "Reasno" ]
});

文档

Benchmark

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

鸣谢

About

⚡️ A lightning speed replacement for Swoole TaskWorker in Go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 68.0%
  • Go 31.3%
  • Shell 0.7%