wang jun 1 year ago
parent
commit
1da727d80e
6 changed files with 167 additions and 6 deletions
  1. 17 0
      application/workerman/ShTcp.php
  2. 45 0
      config/gateway_worker.php
  3. 7 6
      config/log.php
  4. 31 0
      config/worker.php
  5. 58 0
      config/worker_server.php
  6. 9 0
      thinkphp/base.php

+ 17 - 0
application/workerman/ShTcp.php

@@ -0,0 +1,17 @@
+<?php
+namespace app\workerman;
+
+use think\facade\Log;
+use think\worker\Server;
+
+class ShTcp extends Server
+{
+    protected $socket = 'tcp://0.0.0.0:21444';
+
+    public function onMessage($connection, $data)
+    {
+        //$connection->send(json_encode($data));
+        Log::info("ShTcp");
+        Log::info($data);
+    }
+}

+ 45 - 0
config/gateway_worker.php

@@ -0,0 +1,45 @@
+<?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>
+// +----------------------------------------------------------------------
+// +----------------------------------------------------------------------
+// | Workerman设置 仅对 php think worker:gateway 指令有效
+// +----------------------------------------------------------------------
+return [
+    // 扩展自身需要的配置
+    'protocol'              => 'websocket', // 协议 支持 tcp udp unix http websocket text
+    'host'                  => '0.0.0.0', // 监听地址
+    'port'                  => 2348, // 监听端口
+    'socket'                => '', // 完整监听地址
+    'context'               => [], // socket 上下文选项
+    'register_deploy'       => true, // 是否需要部署register
+    'businessWorker_deploy' => true, // 是否需要部署businessWorker
+    'gateway_deploy'        => true, // 是否需要部署gateway
+
+    // Register配置
+    'registerAddress'       => '127.0.0.1:1236',
+
+    // Gateway配置
+    'name'                  => 'thinkphp',
+    'count'                 => 1,
+    'lanIp'                 => '127.0.0.1',
+    'startPort'             => 2000,
+    'daemonize'             => false,
+    'pingInterval'          => 30,
+    'pingNotResponseLimit'  => 0,
+    'pingData'              => '{"type":"ping"}',
+
+    // BusinsessWorker配置
+    'businessWorker'        => [
+        'name'         => 'BusinessWorker',
+        'count'        => 1,
+        'eventHandler' => '\think\worker\Events',
+    ],
+
+];

+ 7 - 6
config/log.php

@@ -14,17 +14,18 @@
 // +----------------------------------------------------------------------
 return [
     // 日志记录方式,内置 file socket 支持扩展
-    'type'        => 'File',
+    'type' => 'File',
     // 日志保存目录
-    'path'        => '',
+    //'path'        => '',
+    'path' => IS_CLI ? RUNTIME_PATH . "log_cli" . DS : LOG_PATH,
     // 日志记录级别
-    'level'       => [],
+    'level' => [],
     // 单文件日志写入
-    'single'      => false,
+    'single' => false,
     // 独立日志级别
     'apart_level' => [],
     // 最大日志文件数量
-    'max_files'   => 0,
+    'max_files' => 0,
     // 是否关闭日志写入
-    'close'       => false,
+    'close' => false,
 ];

+ 31 - 0
config/worker.php

@@ -0,0 +1,31 @@
+<?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>
+// +----------------------------------------------------------------------
+use think\facade\Env;
+
+// +----------------------------------------------------------------------
+// | Workerman设置 仅对 php think worker 指令有效
+// +----------------------------------------------------------------------
+return [
+    // 扩展自身需要的配置
+    'host'                  => '0.0.0.0', // 监听地址
+    'port'                  => 2346, // 监听端口
+    'root'                  => '', // WEB 根目录 默认会定位public目录
+    'app_path'              => '', // 应用目录 守护进程模式必须设置(绝对路径)
+    'file_monitor'          => false, // 是否开启PHP文件更改监控(调试模式下自动开启)
+    'file_monitor_interval' => 2, // 文件监控检测时间间隔(秒)
+    'file_monitor_path'     => [], // 文件监控目录 默认监控application和config目录
+
+    // 支持workerman的所有配置参数
+    'name'                  => 'thinkphp',
+    'count'                 => 4,
+    'daemonize'             => false,
+    'pidFile'               => Env::get('runtime_path') . 'worker.pid',
+];

+ 58 - 0
config/worker_server.php

@@ -0,0 +1,58 @@
+<?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>
+// +----------------------------------------------------------------------
+
+// +----------------------------------------------------------------------
+// | Workerman设置 仅对 php think worker:server 指令有效
+// +----------------------------------------------------------------------
+// return [
+//     // 扩展自身需要的配置
+//     'protocol'       => 'websocket', // 协议 支持 tcp udp unix http websocket text
+//     'host'           => '0.0.0.0', // 监听地址
+//     'port'           => 2345, // 监听端口
+//     'socket'         => '', // 完整监听地址
+//     'context'        => [], // socket 上下文选项
+//     'worker_class'   => '', // 自定义Workerman服务类名 支持数组定义多个服务
+
+//     // 支持workerman的所有配置参数
+//     'name'           => 'thinkphp',
+//     'count'          => 4,
+//     'daemonize'      => false,
+//     'pidFile'        => Env::get('runtime_path') . 'worker.pid',
+
+//     // 支持事件回调
+//     // onWorkerStart
+//     'onWorkerStart'  => function ($worker) {
+
+//     },
+//     // onWorkerReload
+//     'onWorkerReload' => function ($worker) {
+
+//     },
+//     // onConnect
+//     'onConnect'      => function ($connection) {
+
+//     },
+//     // onMessage
+//     'onMessage'      => function ($connection, $data) {
+//         $connection->send('receive success');
+//     },
+//     // onClose
+//     'onClose'        => function ($connection) {
+
+//     },
+//     // onError
+//     'onError'        => function ($connection, $code, $msg) {
+//         echo "error [ $code ] $msg\n";
+//     },
+// ];
+return [
+    'worker_class' => 'app\workerman\ShTcp',
+];

+ 9 - 0
thinkphp/base.php

@@ -14,6 +14,15 @@ define('DS', DIRECTORY_SEPARATOR);
 defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS);
 defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS);
 
+defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS);
+defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS);
+
+if (PHP_SAPI == 'cli') {
+    define('IS_CLI', true);
+} else {
+    define('IS_CLI', false);
+}
+
 // 载入Loader类
 require __DIR__ . '/library/think/Loader.php';