yylh / gosider
v0.1.0
2022-03-23 14:18 UTC
Requires
- php: >=8.0
- ext-sockets: *
- ext-swoole: >=4.8
Requires (Dev)
- swoole/ide-helper: ^4.8
- symfony/var-dumper: ^6.0
This package is auto-updated.
Last update: 2024-12-08 20:52:14 UTC
README
swoole process module run go process as a sider car, use goroutine complete swoole coroutine in some cases
hub.php
<?php include "vendor/autoload.php"; use Al\GoSider\HubManager; use Al\GoSider\Hub; use Al\GoSider\Response; use Al\GoSider\Task; use Al\GoSider\TaskManager; $h = new Hub( bin: getopt(',', ['bin:'])['bin'], taskManager: new TaskManager(), ); $h->onSuccess(function (Response $resp, TaskManager $taskManager) { /** @var \Messages\Reply $reply */ $reply = $resp->getResp(); dump(json_decode($reply->getContext(), true)); dump($reply->getTaskId()); dump(json_decode($reply->getResponse(), true)); // $taskManager[12345] = new Task(6666, [ // 'task' => [ // 'a' => 'swoole', // 'b' => 'world', // ], // 'context' => [ // 'c' => 'golang', // 'd' => 'world', // ], // ]);; // $taskManager->send(); }); // TODO $h->onFail(function (Response $resp, TaskManager $taskManager) { }); // TODO $h->onTime(function (Response $resp, TaskManager $taskManager) { }); $hm = new HubManager($h); $hm->start();
<?php # some code that may be got blocked in swoole, # just use Task class it make unblocked require 'vendor/autoload.php'; use Al\GoSider\Bus; use Al\GoSider\Task; $t1 = new Task(1111, [ 'task' => [ 'a' => '中国', 'b' => 'world', ], 'context' => [ 'c' => '中国', 'd' => 'world', ], ]); $t2 = new Task(2222, [ 'task' => [ 'a' => '中国', 'b' => 'world', ], 'context' => [ 'c' => '中国', 'd' => 'world', ], ]); $bus = new Bus(compact('t1', 't2')); $bus->send();
gosider
package main import ( "context" "encoding/json" "github.com/alwaysLinger/gosider/pkg/hub" "github.com/alwaysLinger/gosider/pkg/pb" ) func main() { h := hub.NewHub(func(ctx context.Context, req interface{}) (interface{}, error) { task, _ := req.(*pb.Task) return &pb.Reply{ TaskId: task.GetTaskId(), Status: 123, Response: jsonResp(), Context: task.GetContext(), }, nil }) h.Start() } type resp struct { FieldA string `json:"field_a"` FieldB string `json:"field_b"` FieldC string `json:"field_c"` } func jsonResp() []byte { marshal, err := json.Marshal(resp{ FieldA: "hello", FieldB: "swoole", FieldC: "golang", }) if err != nil { return nil } return marshal }
php main.php --bin /path/to/your/goexecfile php task.php