bearsunday/thrift

0.1.0 2024-03-18 02:14 UTC

This package is auto-updated.

Last update: 2024-08-25 09:18:44 UTC


README

CI

一个允许使用 ThriftSwoole 从多种语言快速访问 BEAR.Sunday 资源的包。

功能

  • BEAR.Sunday 资源可以跨多种语言和框架使用
  • 本地 BEAR.Sunday 应用无缝访问远程 BEAR.Sunday 应用
  • 无论语言如何,都可以访问资源(目前支持 PHP、Go、Python、Ruby 和 BEAR.Sunday)
  • 与 HTTP 相比,使用 Thrift/Swoole 快速访问
  • 可以从旧版本的 BEAR.Sunday 应用调用资源
  • 独立于 HTTP 服务器运行

安装

composer require bearsunday/thrift

用法

服务器端(PHP:BEAR.Sunday)

bin/serve.php

(new ServerBootstrap)(new Config(
    appName: 'MyVendor\MyApp',
    hostname: '127.0.0.1',
    port: 9090,
    appDir: dirname(__DIR__) . '/path/to/app',
    context: 'prod-app',
    server: Engine::Swoole
))

启动 Thrift 服务器

> php bin/serve.php
[Sun Mar 17 19:39:20 2024] PHP 8.3.4 Thrift Server (powered by Swoole) started.
Listening on http://127.0.0.1:9090
Document root is /path/to/app
Application context is prod-hal-api-app

客户端

BEAR.Sunday

在模块中导入 Thrift App。

protected function configure(): void
{
    // Binding thirft app to a host called "sekai"
    $this->override(new ImportThriftAppModule([
        new ThriftApp('sekai', '127.0.0.1', '9090')
    ]));
}

Thrift 应用就像 'self' 应用一样可用。详见 更多

echo $resource->get('page://self/?name=Sekai');  // "greeting": "Konichiwa Sekai" from local app
echo $resource->get('page://sekai/?name=World'); // "greeting": "Hello World" from remote(127.0.0.1:9090) app
// echo $resource->get('/?name=World'); // "greeting": "Hello World" from remote(127.0.0.1:9090) app

PHP

$method = 'get';
$uri = '/user?id=1';

$invoke = new ResourceInvoke($host, $port);
$response = $invoke($method, $uri);

assert($response instanceof ResourceResponse);
printf("Response Code: %s\n", $response->code);
printf("Response Headers: %s\n", json_encode($response->headers));
printf("Raw Response JsonValue: : %s\n", $response->jsonValue);
printf("Response View: %s\n", $response->view);

Go

method := "get"
uri := "/user?id=1

response, err := ResourceInvoke(hostname, port, method, uri)

fmt.Println("Response Code:", response.Code)
fmt.Println("Response Headers:", response.Headers)
fmt.Println("Raw Response JsonValue: ", response.JsonValue)
fmt.Println("Response View:", response.View)

Python

method = "get"
uri = "/user?id=1"

response = ResourceInvoke(hostname, port, method, uri)

print("Response Code:", response.code)
print("Response Headers:", response.headers)
print("Raw Response JsonValue:", response.jsonValue)
print("Response View:", response.view)

Ruby

method = "get"
uri = "/user?id=1"

resource_invoke = ResourceInvoke.new(hostname, port)
response = resource_invoke.call(method, uri)

puts "Response Code: #{response.code}"
puts "Response Headers: #{response.headers}"
puts "Raw Response JsonValue: #{response.jsonValue}"
puts "Response View: #{response.view}"

注意:URI 可以是模式,也可以是路径。例如,而不是 /user?id=1,您可以指定 page://self/user?id=1 来访问应用和页面资源。

如您所见,从其他语言访问 BEAR.Sunday 资源非常容易。资源成为超越应用程序的资产,可以快速访问。

演示

构建 go & python 并启动 thrift 服务器。

composer build:all
composer serve

在另一个终端中运行 go 和 python 客户端。

composer run:go
composer run:py
composer run:php

注意:要运行上述脚本,必须安装 Swoole、Thrift、go 和 python。如果您使用 brew 安装,则非常直接。

brew install thrift
brew install go
brew install python3