windows環(huán)境,workerman能看到打印日志,gateway就是看不到,真的不知道為什么
這是控制臺:
這是代碼:
GatewayWorker.php
<?php
namespace app\common\command;
use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Config;
use Workerman\Worker;
/**
* GatewayWorker 命令行
*/
class GatewayWorker extends Command
{
protected function configure()
{
$this->setName('gateway')
->addArgument('service', Argument::OPTIONAL, 'workerman service: gateway|register|businessworker', null)
->addArgument('action', Argument::OPTIONAL, "start|stop|restart|reload|status|connections", 'start')
->addOption('host', 'H', Option::VALUE_OPTIONAL, 'the host of workerman server', null)
->addOption('port', 'P', Option::VALUE_OPTIONAL, 'the port of workerman server', null)
->addOption('daemon', 'd', Option::VALUE_OPTIONAL, 'Run the workerman server in daemon mode.')
->setDescription('GatewayWorker Server for ThinkPHP');
}
public function execute(Input $input, Output $output)
{
$service = $input->getArgument('service');
$action = $input->getArgument('action');
if (!in_array($action, ['start', 'stop', 'reload', 'restart', 'status', 'connections'])) {
$output->writeln("Invalid argument action:{$action}, Expected start|stop|restart|reload|status|connections .");
exit(1);
}
global $argv;
array_shift($argv);
array_shift($argv);
array_unshift($argv, 'think', $action);
if ('start' == $action) {
$output->writeln('Starting GatewayWorker server...');
}
$option = Config::get('gateway_worker');
if ($input->hasOption('host')) {
$host = $input->getOption('host');
} else {
$host = !empty($option['host']) ? $option['host'] : '0.0.0.0';
}
if ($input->hasOption('port')) {
$port = $input->getOption('port');
} else {
$port = !empty($option['port']) ? $option['port'] : '2347';
}
$registerAddress = !empty($option['registerAddress']) ? $option['registerAddress'] : '127.0.0.1:1236';
$this->start($host, (int) $port, $option, $registerAddress, $service, $output);
}
/**
* 啟動
* @access public
* @param string $host 監(jiān)聽地址
* @param integer $port 監(jiān)聽端口
* @param array $option 參數(shù)
* @param string $registerAddress 注冊地址
* @param string $service 服務名稱
* @param Output $output 輸出
* @return void
*/
public function start(string $host, int $port, array $option, string $registerAddress, string $service, Output $output)
{
switch ($service) {
case 'register':
$this->register($registerAddress);
break;
case 'businessworker':
$this->businessWorker($registerAddress, $option['businessWorker'] ?? []);
break;
case 'gateway':
$this->gateway($registerAddress, $host, $port, $option);
break;
default:
$output->writeln("<error>Invalid argument action:{$service}, Expected gateway|register|businessworker .</error>");
exit(1);
break;
}
Worker::runAll();
}
/**
* 啟動register
* @access public
* @param string $registerAddress
* @return void
*/
public function register(string $registerAddress)
{
// 初始化register
new Register('text://' . $registerAddress);
}
/**
* 啟動businessWorker
* @access public
* @param string $registerAddress registerAddress
* @param array $option 參數(shù)
* @return void
*/
public function businessWorker(string $registerAddress, array $option = [])
{
// 初始化 bussinessWorker 進程
$worker = new BusinessWorker();
$this->option($worker, $option);
$worker->registerAddress = $registerAddress;
}
/**
* 啟動gateway
* @access public
* @param string $registerAddress registerAddress
* @param string $host 服務地址
* @param integer $port 監(jiān)聽端口
* @param array $option 參數(shù)
* @return void
*/
public function gateway(string $registerAddress, string $host, int $port, array $option = [])
{
// 初始化 gateway 進程
if (!empty($option['socket'])) {
$socket = $option['socket'];
unset($option['socket']);
} else {
$protocol = !empty($option['protocol']) ? $option['protocol'] : 'websocket';
$socket = $protocol . '://' . $host . ':' . $port;
unset($option['host'], $option['port'], $option['protocol']);
}
$gateway = new Gateway($socket, $option['context'] ?? []);
// 以下設置參數(shù)都可以在配置文件中重新定義覆蓋
$gateway->name = 'Gateway';
$gateway->count = 4;
$gateway->lanIp = '127.0.0.1';
$gateway->startPort = 2000;
$gateway->pingInterval = 30;
$gateway->pingNotResponseLimit = 0;
$gateway->pingData = '{"type":"ping"}';
$gateway->registerAddress = $registerAddress;
// 全局靜態(tài)屬性設置
foreach ($option as $name => $val) {
if (in_array($name, ['stdoutFile', 'daemonize', 'pidFile', 'logFile'])) {
Worker::${$name} = $val;
unset($option[$name]);
}
}
$this->option($gateway, $option);
}
/**
* 設置參數(shù)
* @access protected
* @param Worker $worker Worker對象
* @param array $option 參數(shù)
* @return void
*/
protected function option(Worker $worker, array $option = [])
{
// 設置參數(shù)
if (!empty($option)) {
foreach ($option as $key => $val) {
$worker->$key = $val;
}
}
}
}
Event.php
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\common\business;
use GatewayWorker\Lib\Gateway;
use think\worker\Application;
use Workerman\Worker;
/**
* Worker 命令行服務類
*/
class Events
{
/**
* onWorkerStart 事件回調(diào)
* 當businessWorker進程啟動時觸發(fā)。每個進程生命周期內(nèi)都只會觸發(fā)一次
*
* @access public
* @param \Workerman\Worker $businessWorker
* @return void
*/
public static function onWorkerStart(Worker $businessWorker)
{
$app = new Application;
$app->initialize();
}
/**
* onConnect 事件回調(diào)
* 當客戶端連接上gateway進程時(TCP三次握手完畢時)觸發(fā)
*
* @access public
* @param int $client_id
* @return void
*/
public static function onConnect($client_id)
{
Gateway::sendToCurrentClient("Your client_id is a $client_id");
}
/**
* onWebSocketConnect 事件回調(diào)
* 當客戶端連接上gateway完成websocket握手時觸發(fā)
*
* @param integer $client_id 斷開連接的客戶端client_id
* @param mixed $data
* @return void
*/
public static function onWebSocketConnect($client_id, $data)
{
var_export($data);
}
/**
* onMessage 事件回調(diào)
* 當客戶端發(fā)來數(shù)據(jù)(Gateway進程收到數(shù)據(jù))后觸發(fā)
*
* @access public
* @param int $client_id
* @param mixed $data
* @return void
* @throws \Exception
*/
public static function onMessage($client_id, $data)
{
var_dump($data);
if($data == 'ping') {
file_put_contents('gateway.log', $data . "\n", FILE_APPEND);
Gateway::sendToClient($client_id, 'pong');
} else {
file_put_contents('gateway.log', $data . "\n", FILE_APPEND);
Gateway::sendToAll($data);
}
}
/**
* onClose 事件回調(diào) 當用戶斷開連接時觸發(fā)的方法
*
* @param integer $client_id 斷開連接的客戶端client_id
* @return void
* @throws \Exception
*/
public static function onClose($client_id)
{
GateWay::sendToAll("client[$client_id] logout\n");
}
/**
* onWorkerStop 事件回調(diào)
* 當businessWorker進程退出時觸發(fā)。每個進程生命周期內(nèi)都只會觸發(fā)一次。
*
* @param \Workerman\Worker $businessWorker
* @return void
*/
public static function onWorkerStop(Worker $businessWorker)
{
echo "WorkerStop\n";
}
}
下面兩行寫入log文件都有內(nèi)容,但是上面那行var_dump的打印在控制臺就是看不到