docker-workerman-jsonrpc/README.md

4.2 KiB
Raw Blame History

基于docker的workerman-jsonrpc

我们在php:8.1-cli基础上安装了运行workerman必要的一些扩展和开发中常用的扩展以及composer制作成workerman:8.1镜像因此在开发环境中不需要再额外配置php环境直接写业务代码即可。

依赖

只要系统环境中有docker即可不需要安装php环境

使用方法

# 启动
./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
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
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
RpcClient::instance('User')->getInfoByUid($uid);

调用的是Applications/JsonRpc/Services/User.php 中 User类的getInfoByUid方法。
User.php文件类似这样

<?php
class User
{
       public static function getInfoByUid($uid)
        {
            // ....
        }
   
        public static function getEmail($uid)
        {
            // ...
        }
}

如果你想要增加一组服务,可以在这个目录下增加类文件即可。

rpc监控页面

rpc监控页面地址 http://ip:55757