docker-workerman-jsonrpc/README.md

172 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 基于docker的workerman-jsonrpc
我们在`php:8.1-cli`基础上安装了运行workerman必要的一些扩展和开发中常用的扩展以及composer制作成`workerman:8.1`镜像因此在开发环境中不需要再额外配置php环境直接写业务代码即可。
## 依赖
只要系统环境中有docker即可不需要安装php环境
## 使用方法
```sh
# 启动
./start
# composer
./composer install
./conposer require xxxx
```
## 一些有用的文件
| 文件 | 作用 | 用法或说明 |
|---|---|---|
|composer|调起容器中的`composer`命令的shell脚本|`./composer $args...`|
|start|调起容器中的`php start.php`命令的shell脚本|`./start`或`./start start`|
|docker-compose-dev.yml|运行容器的编排文件|一般不需要理会这个文件composer和start脚本都需要依赖这个文件|
|php.ini|映射到容器中的php.ini配置文件|容器中已经安装的扩展都有单独的配置文件,这里不会有体现|
- 一定要保证`composer`脚本、`start`脚本中的`compose_file`文件名与实际的`docker-compose-dev.yml`文件名一致。
- 一定要保证`composer`脚本、`start`脚本中的`service_name`容器名称与`docker-compose-dev.yml`文件中的`container_name`保持一致。
## workerman
workerman 是一个高性能的PHP socket服务框架开发者可以在这个框架下开发各种网络应用,例如Rpc服务、聊天室、游戏等。
workerman 具有以下特性
* 多进程
* 支持TCP/UDP
* 支持各种应用层协议
* 使用libevent事件轮询库支持高并发
* 支持文件更新检测及自动加载
* 支持服务平滑重启
* 支持telnet远程控制及监控
* 支持异常监控及告警
* 支持长连接
* 支持以指定用户运行worker进程
所需环境
========
workerman需要PHP版本不低于5.3只需要安装PHP的Cli即可无需安装PHP-FPM、nginx、apache
workerman不能运行在Window平台
安装
=========
1、下载 或者 git clone ```https://github.com/walkor/workerman-JsonRpc```
2、运行 ```composer install```
启动停止
=========
启动
`php start.php start -d`
重启启动
`php start.php restart`
平滑重启/重新加载配置
`php start.php reload`
查看服务状态
`php start.php status`
停止
`php start.php stop`
Rpc应用使用方法
=========
### 客户端同步调用:
```php
<?php
include_once 'yourClientDir/RpcClient.php';
$address_array = array(
'tcp://127.0.0.1:2015',
'tcp://127.0.0.1:2015'
);
// 配置服务端列表
RpcClient::config($address_array);
$uid = 567;
// User对应applications/JsonRpc/Services/User.php 中的User类
$user_client = RpcClient::instance('User');
// getInfoByUid对应User类中的getInfoByUid方法
$ret_sync = $user_client->getInfoByUid($uid);
```
### 客户端异步调用:
RpcClient支持异步远程调用
```php
<?php
include_once 'yourClientDir/RpcClient.php';
// 服务端列表
$address_array = array(
'tcp://127.0.0.1:2015',
'tcp://127.0.0.1:2015'
);
// 配置服务端列表
RpcClient::config($address_array);
$uid = 567;
$user_client = RpcClient::instance('User');
// 异步调用User::getInfoByUid方法
$user_client->asend_getInfoByUid($uid);
// 异步调用User::getEmail方法
$user_client->asend_getEmail($uid);
这里是其它的业务代码
....................
....................
// 需要数据的时候异步接收数据
$ret_async1 = $user_client->arecv_getEmail($uid);
$ret_async2 = $user_client->arecv_getInfoByUid($uid);
这里是其他业务逻辑
```
### 服务端:
服务端每个类提供一组服务类文件默认放在Applications/JsonRpc/Services目录下。
客户端实际上是远程调用这些类的静态方法。
例如:
```php
<?php
RpcClient::instance('User')->getInfoByUid($uid);
```
调用的是Applications/JsonRpc/Services/User.php 中 User类的getInfoByUid方法。
User.php文件类似这样
```php
<?php
class User
{
public static function getInfoByUid($uid)
{
// ....
}
public static function getEmail($uid)
{
// ...
}
}
```
如果你想要增加一组服务,可以在这个目录下增加类文件即可。
rpc监控页面
======
rpc监控页面地址 http://ip:55757