配置服务

  1. // http 协议 rpc服务
  2. [
  3. 'port' => 8082,
  4. 'action' => \App\Server\RpcHttpPort::class,
  5. 'type' => SWOOLE_SOCK_TCP,
  6. 'ip' => '0.0.0.0',
  7. 'set' => [
  8. 'open_http_protocol' => true,
  9. 'open_websocket_protocol' => false
  10. ]
  11. ],
  12. // tpc 协议 rpc服务
  13. [
  14. 'port' => 8083,
  15. 'action' => \App\Server\RpcTcpPort::class,
  16. 'type' => SWOOLE_SOCK_TCP,
  17. 'pack_protocol' => \One\Protocol\Frame::class, // tcp 打包 解包协议
  18. 'ip' => '0.0.0.0',
  19. 'set' => [
  20. 'open_http_protocol' => false,
  21. 'open_websocket_protocol' => false,
  22. 'open_length_check' => 1,
  23. 'package_length_func' => '\One\Protocol\Frame::length',
  24. 'package_body_offset' => \One\Protocol\Frame::HEAD_LEN,
  25. ]
  26. ]

添加服务

  1. // 添加Abc到rpc服务
  2. RpcServer::add(Abc::class);
  3. // 如果你不希望把Abc下的所有方法都添加到rpc服务,也可以指定添加。
  4. // 未指定的方法客户端无法调用.
  5. //RpcServer::add(Abc::class,'add');
  6. // 分组添加
  7. //RpcServer::group([
  8. // // 中间件 在这里可以做 权限验证 数据加解密 等等
  9. // 'middle' => [
  10. // TestMiddle::class . '@aa'
  11. // ],
  12. // // 缓存 如果设置了 当以同样的参数调用时 会返回缓存信息 不会真正调用 单位:秒
  13. // 'cache' => 10
  14. //], function () {
  15. // RpcServer::add(Abc::class);
  16. // RpcServer::add(User::class);
  17. //});

客户端调用

  1. // 映射类 one框架会自送生成 访问http服务 http://127.0.0.1:8082/ 下载
  2. class ClientAbc extends RpcClientHttp {
  3. // rpc服务器地址
  4. protected $_rpc_server = 'http://127.0.0.1:8082/';
  5. // 远程的类 不设置 默认为当前类名
  6. protected $_remote_class_name = 'Abc';
  7. }
  8. $abc = new ClientAbc(5);
  9. // $res === 10
  10. $res = $abc->add(2,3);
  11. // 链式调用 $res === 105
  12. $res = $abc->setA(100)->add(2,3);

如果是tcp请继承 RpcClientTcp 代码地址 RpcClientTcp RpcClientHttp

如果在one框架内tcp调用 请继承 RpcTcp支持协程