WorkermanCommand.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Console\Commands;
  3. // require_once(public_path()."/saler_vendor/vendor/autoload.php");
  4. use GatewayWorker\BusinessWorker;
  5. use GatewayWorker\Gateway;
  6. use GatewayWorker\Register;
  7. use Illuminate\Console\Command;
  8. use Workerman\Worker;
  9. class WorkermanCommand extends Command
  10. {
  11. protected $signature = 'workman {action} {--d}';
  12. protected $description = 'Start a Workerman server.';
  13. public function handle()
  14. {
  15. global $argv;
  16. $action = $this->argument('action');
  17. $argv[0] = 'wk';
  18. $argv[1] = $action;
  19. $argv[2] = $this->option('d') ? '-d' : '';
  20. $this->start();
  21. }
  22. private function start()
  23. {
  24. $this->startGateWay();
  25. $this->startBusinessWorker();
  26. $this->startRegister();
  27. Worker::runAll();
  28. }
  29. private function startBusinessWorker()
  30. {
  31. $worker = new BusinessWorker();
  32. //work名称
  33. $worker->name = 'BusinessWorker';
  34. //businessWork进程数
  35. $worker->count = 2;
  36. //服务注册地址
  37. $worker->registerAddress = '127.0.0.1:1236';
  38. //设置\App\Workerman\Events类来处理业务
  39. $worker->eventHandler = \App\DataApi\Helper\WorkmanServerHelper::class;
  40. }
  41. private function startGateWay()
  42. {
  43. //gateway进程
  44. $context = [
  45. 'ssl' => [
  46. 'local_cert' => public_path().'/saler_ssl_key/fullchain.pem', // 你的SSL证书路径
  47. 'local_pk' => public_path().'/saler_ssl_key/privkey.key', // 你的SSL证书私钥路径
  48. 'verify_peer' => false, // 禁用对等验证
  49. 'verify_peer_name' => false, // 禁用对等验证
  50. 'allow_self_signed' => true // 允许自签名证书
  51. ]
  52. ];
  53. $gateway = new Gateway("websocket://0.0.0.0:2346",$context);
  54. // 开启SSL,websocket+SSL 即wss
  55. $gateway->transport = 'ssl';
  56. //gateway名称 status方便查看
  57. $gateway->name = 'Gateway';
  58. //gateway进程
  59. $gateway->count = 2;
  60. //本机ip
  61. $gateway->lanIp = '127.0.0.1';
  62. //内部通讯起始端口,如果$gateway->count = 4 起始端口为2300
  63. //则一般会使用 2300,2301 2个端口作为内部通讯端口
  64. $gateway->startPort = 2300;
  65. //心跳间隔
  66. $gateway->pingInterval = 30;
  67. //客户端连续$pingNotResponseLimit次$pingInterval时间内不发送任何数据则断开链接,并触发onClose。
  68. //我们这里使用的是服务端主动发送心跳所以设置为0
  69. $gateway->pingNotResponseLimit = 0;
  70. //心跳数据
  71. $gateway->pingData = '{"type":"@heart@"}';
  72. //服务注册地址
  73. $gateway->registerAddress = '127.0.0.1:1236';
  74. }
  75. private function startRegister()
  76. {
  77. new Register('text://0.0.0.0:1236');
  78. }
  79. }