Sgateway.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace app\index\kefu\controller;
  3. use GatewayWorker\Gateway;
  4. use Workerman\Worker;
  5. require_once __DIR__ . '/../../../addons/kefu/library/GatewayWorker/vendor/autoload.php';
  6. /**
  7. * Win下启动 gateway服务 专用类
  8. */
  9. class Sgateway
  10. {
  11. function __construct()
  12. {
  13. $kefu_config = get_addon_config('kefu');
  14. // gateway 进程
  15. $context = [];
  16. $ssl_start = false;
  17. if ($kefu_config['wss_switch'] && $kefu_config['ssl_cert'] && $kefu_config['ssl_cert_key']) {
  18. $context ['ssl'] = [
  19. // 使用绝对路径
  20. 'local_cert' => $kefu_config['ssl_cert'], // 也可以是crt文件
  21. 'local_pk' => $kefu_config['ssl_cert_key'],
  22. 'verify_peer' => false,
  23. //'allow_self_signed' => true, //如果是自签名证书开启此选项
  24. ];
  25. $ssl_start = true;
  26. }
  27. $gateway = new Gateway("websocket://0.0.0.0:" . $kefu_config['websocket_port'], $context);
  28. if ($ssl_start) {
  29. // 开始SSL
  30. $gateway->transport = 'ssl';
  31. }
  32. // gateway名称,status方便查看
  33. $gateway->name = 'KeFuGateway' . ($ssl_start ? '-wss' : '');
  34. // gateway进程数
  35. $gateway->count = $kefu_config['gateway_process_number'];
  36. // 本机ip,分布式部署时使用内网ip
  37. $gateway->lanIp = '127.0.0.1';
  38. // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
  39. // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
  40. $gateway->startPort = $kefu_config['internal_start_port'];
  41. // 服务注册地址
  42. $gateway->registerAddress = '127.0.0.1:' . $kefu_config['register_port'];
  43. // 心跳间隔
  44. $gateway->pingInterval = 30;
  45. $gateway->pingNotResponseLimit = 1;
  46. // 心跳数据
  47. $gateway->pingData = '';
  48. // 如果不是在根目录启动,则运行runAll方法
  49. if (!defined('GLOBAL_START')) {
  50. Worker::runAll();
  51. }
  52. }
  53. }