bearsunday / thrift
0.1.0
2024-03-18 02:14 UTC
Requires
- php: ^8.1
- apache/thrift: ^0.19.0
- bear/package: ^1.10
- bear/resource: ^1.20
- doctrine/coding-standard: ^12.0
- squizlabs/php_codesniffer: ^3.5
README
一个允许使用 Thrift 和 Swoole 从多种语言快速访问 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