https://github.com/imiphp/imi-hprose
在 imi 框架中集成 Hprose 服务开发。QQ群:17916227
https://github.com/imiphp/imi-hprose
Last synced: 8 months ago
JSON representation
在 imi 框架中集成 Hprose 服务开发。QQ群:17916227
- Host: GitHub
- URL: https://github.com/imiphp/imi-hprose
- Owner: imiphp
- License: mit
- Created: 2018-12-26T07:27:30.000Z (over 7 years ago)
- Default Branch: 2.0
- Last Pushed: 2023-10-18T05:09:13.000Z (over 2 years ago)
- Last Synced: 2025-06-30T12:44:54.134Z (11 months ago)
- Language: PHP
- Homepage: https://www.imiphp.com/
- Size: 186 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# imi-hprose
[](https://packagist.org/packages/imiphp/imi-hprose)
[](https://secure.php.net/)
[](https://github.com/swoole/swoole-src)
[](https://github.com/imiphp/imi-hprose/blob/master/LICENSE)
## 介绍
在 imi 框架中集成 Hprose 服务开发,目前支持`TCP`、`Unix Socket`协议。
未来将实现:中间件、过滤器、`Http` 协议、`WebSocket` 协议……
> 本仓库仅用于浏览,不接受 issue 和 Pull Requests,请前往:
## Composer
本项目可以使用composer安装,遵循psr-4自动加载规则,在你的 `composer.json` 中加入下面的内容:
```json
{
"require": {
"imiphp/imi-hprose": "~2.0.0"
}
}
```
然后执行 `composer update` 安装。
## 服务端
在项目 `config/config.php` 中配置:
```php
[
'components' => [
// 引入RPC组件以及本组件
'Rpc' => 'Imi\Rpc',
'Hprose' => 'Imi\Hprose',
],
]
```
如果你用主服务器:
```php
[
// 主服务器配置
'mainServer' => [
'namespace' => 'XXX\MainServer', // 你的命名空间
'type' => 'Hprose', // 必须设为 Hprose
'port' => 8080,
],
]
```
如果你用子服务器:
```php
[
// 子服务器(端口监听)配置
'subServers' => [
// 子服务器名
'XXX' => [
'namespace' => 'XXX\Hprose', // 你的命名空间
'type' => 'Hprose', // 必须设为 Hprose
'port' => 50001,
]
],
]
```
### 控制器基类
`Imi\Rpc\Controller\RpcController`
### 控制器注解
`\Imi\Rpc\Route\Annotation\RpcController`
用法:
`@RpcController`
别名前缀:`@RpcController('a_b_')`
### 动作注解
`\Imi\Rpc\Route\Annotation\RpcAction`
无参
### 路由注解
`\Imi\Hprose\Route\Annotation\HproseRoute`
参数:
- `name` 路由名称规则。一般也是方法名,如果设置了别名,则最终为别名+方法名
- `mode` 该设置表示该服务函数返回的结果类型,具体值请参考 Hprose 文档
- `simple` 该设置表示本服务函数所返回的结果是否为简单数据。默认值为 false。
- `oneway` 该设置表示本服务函数是否不需要等待返回值。当该设置为 true 时,调用会异步开始,并且不等待结果,立即返回 null 给客户端。默认值为 false。
- `async` 该设置表示本服务函数是否为异步函数,异步函数的最后一个参数是一个回调函数,用户需要在异步函数中调用该回调方法来传回返回值
- `passContext` 该属性为 boolean 类型,默认值为 false。具体请参考 Hprose 文档
> Hprose 文档参考:https://github.com/hprose/hprose-php/wiki/06-Hprose-服务器#addfunction-%E6%96%B9%E6%B3%95
## 客户端
### 连接池配置
```php
[
'pools' => [
'连接池名' => [
'sync' => [
'pool' => [
'class' => \Imi\Rpc\Client\Pool\RpcClientSyncPool::class,
'config' => [
// 连接池通用,查阅文档
],
],
'resource' => [
'clientClass' => \Imi\Hprose\Client\HproseSocketClient::class,
'uris' => 'tcp://127.0.0.1:50001', // 连接地址
// 其它配置
]
],
'async' => [
'pool' => [
'class' => \Imi\Rpc\Client\Pool\RpcClientCoroutinePool::class,
'config' => [
// 连接池通用,查阅文档
],
],
'resource' => [
'clientClass' => \Imi\Hprose\Client\HproseSocketClient::class,
'uris' => 'tcp://127.0.0.1:50001', // 连接地址
// 其它配置
]
],
],
],
'rpc' => [
'defaultPool' => '连接池名', // 默认连接池名
],
]
```
### 客户端调用
代码调用:
```php
\Imi\Rpc\Client\Pool\RpcClientPool::getService('服务名')->方法名(参数);
```
注解调用:
```php
class Test
{
/**
* @RpcClient()
*
* @var \Imi\Rpc\Client\IRpcClient
*/
protected $rpcClient;
/**
* @RpcService(serviceName="服务名")
*
* @var \Imi\Rpc\Client\IService
*/
protected $xxxRpc;
public function aaa()
{
// 方法一
$this->rpcClient->getService('服务名')->方法名(参数);
// 方法二
$this->xxxRpc->方法名(参数);
}
}
```
## 免费技术支持
QQ群:17916227 [](https://jq.qq.com/?_wv=1027&k=5wXf4Zq),如有问题会有人解答和修复。
## 运行环境
- [PHP](https://php.net/) >= 7.4
- [Composer](https://getcomposer.org/) >= 2.0
- [Swoole](https://www.swoole.com/) >= 4.1.0
## 版权信息
`imi-hprose` 遵循 MIT 开源协议发布,并提供免费使用。
## 捐赠

开源不求盈利,多少都是心意,生活不易,随缘随缘……