SW-X RPC服务

以下为使用的相关说明,更详细的组件代码请看组件库文档

起服说明

按上面的交互图,我们可以看出,一套完整的RPC服务,至少需要启用3个不同的服务端,分别如下:
1、RPC服务端:使用sw-x start rpc启动服务,服务代码存放在/app/rpc文件夹里。

2、服务中心-HTTP端:先在/config/rpc.php配置文件中,修改http_rpc_is项为true
然后使用sw-x rpc start创建服务中间组件,最后再使用sw-x start http启动服务,在启动服务之前,我们还可以在/rpc/map.php文件中,先配置初始的RPC服务节点。

3、应用客户端:直接使用sw-x start http启动服务,通过\x\RpcClient组件来调用RPC服务,中间的服务调用,会统一向服务中心-HTTP端获取,使用者无需任何操作。

RPC的数据交互格式

SW-X的RPC服务,底层是走的TCP链接。
其中RPC服务端收到的数据格式为JSON格式。
数据未传输加密前的格式如下:

[
    'class' => '路由地址',
    'function' => '服务接口名称',
    'headers' => '请求头-数组格式',
    'param' => '请求参数-数组格式',
]

若开启加密,则数据加密函数如下:

class Currency
{ 
    /**
        * AES加密方法
        * @todo 无
        * @author 小黄牛
        * @version v1.2.24 + 2021.1.9
        * @deprecated 暂不启用
        * @global 无
        * @param string $data 要加密的数据 
        * @return void
    */
    public function aes_encrypt($data) {  
        $config = \x\Config::run()->get('rpc');
        return openssl_encrypt($data, $config['aes_method'], $config['aes_key'], 0, $config['aes_iv']);  
    }  
    
    /**
        * AES解密方法
        * @todo 无
        * @author 小黄牛
        * @version v1.2.24 + 2021.1.9
        * @deprecated 暂不启用
        * @global 无
        * @param string $data 要解密的数据 
        * @return void
    */  
    public function aes_decrypt($data) {  
        $config = \x\Config::run()->get('rpc');
        return openssl_decrypt($data, $config['aes_method'], $config['aes_key'], 0, $config['aes_iv']);  
    } 
}

而RPC服务端返回的数据格式也是JSON格式:
数据未加密前的格式如下:

[
    'status' => '状态码',
    'msg' => '说明',
    'data' => '服务返回值'
]

若请求成功,则status状态码为200,其余状态码均表示请求失败。

根据以上数据交互流程,可自行使用PHP之外的语言,来对接SW-X启动的RPC服务噢。