setName('workerman:server') ->addArgument('action', Argument::OPTIONAL, "start|stop|restart|reload|status|connections", 'start') ->addOption('mode', 'm', Option::VALUE_OPTIONAL, 'Run the workerman server in daemon mode.') ->setDescription('Wechat server'); } protected function execute(Input $input, Output $output) { // 指令输出 $output->writeln('convert start'); $action = $input->getArgument('action'); $mode = $input->getOption('mode'); // 重新构造命令行参数,以便兼容workerman的命令 global $argv; $argv = []; array_unshift($argv, 'think', $action); if ($mode == 'd') { $argv[] = '-d'; } else if ($mode == 'g') { $argv[] = '-g'; } try { // 初始化Channel服务(用于跨进程通信) $channel_server = new \Channel\Server('0.0.0.0', 2206); // 在这里放心的实例化worker, // 就像参照workerman文档写一样, $xhsWorker = new Worker('websocket://0.0.0.0:2345'); $xhsWorker->count = 1; $xhsWorker->name = 'IMAIWORK-XhsSocketService'; $service = new \app\common\workerman\xhs\XhsSocketService($xhsWorker); $xhsWorker->onWorkerStart = array($service, 'onWorkerStart'); $xhsWorker->onConnect = array($service, 'onConnect'); $xhsWorker->onMessage = array($service, 'onMessage'); $xhsWorker->onClose = array($service, 'onClose'); $xhsWorker->onError = array($service, 'onError'); // 无非在workerman的文档里,代码是新建纯php文件,但在这里,写到了一个方法里. $worker = new Worker('websocket://0.0.0.0:2347'); $worker->count = 4; $worker->name = 'IMAIWORK-WechatSocketService'; $service = new \app\common\workerman\wechat\WechatSocketService(); $worker->onWorkerStart = array($service, 'onWorkerStart'); $worker->onConnect = array($service, 'onConnect'); $worker->onMessage = array($service, 'onMessage'); $worker->onClose = array($service, 'onClose'); $worker->onError = array($service, 'onError'); //设备socket $tcpWorker = new Worker('tcp://0.0.0.0:6489'); $tcpWorker->count = 4; $tcpWorker->name = 'IMAIWORK-DeviceSocketService'; $deviceService = new \app\common\workerman\wechat\DeviceSocketService(); $tcpWorker->onWorkerStart = array($deviceService, 'onWorkerStart'); $tcpWorker->onConnect = array($deviceService, 'onConnect'); $tcpWorker->onMessage = array($deviceService, 'onMessage'); $tcpWorker->onClose = array($deviceService, 'onClose'); $tcpWorker->onError = array($deviceService, 'onError'); Worker::runAll(); } catch (\Exception $e) { // clogger($e); print_r($e->__toString()); } } }