<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 添加workerman ### 1、下載workerman包 ``` composer require workerman/workerman composer require workerman/gateway-worker ``` ### 2\創建啟動命令 生成 WorkermanCommand 文件 ~~~ php artisan make:command WorkermanCommand ~~~ 執行以上命令行會在 app/Console/Commands/ 目錄下生成 WorkermanCommand.php 文件,對文件做如下修改。 ~~~php <?php namespace App\Console\Commands; use Workerman\Worker; use Illuminate\Console\Command; class WorkermanCommand extends Command { private $server; /** * The name and signature of the console command. * * @var string */ protected $signature = 'wk {action}'; /** * The console command description. * * @var string */ protected $description = 'Start a Workerman server.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { global $argv; $arg = $this->argument('action'); $argv[1] = $argv[2]; $argv[2] = isset($argv[3]) ? "-{$argv[3]}" : ''; switch ($arg) { case 'start': $this->start(); break; case 'stop': break; case 'restart': break; case 'reload': break; case 'status': break; case 'connections': break; } } private function start() { // 創建一個Worker監聽20002端口,不使用任何應用層協議 $this->server = new Worker("tcp://0.0.0.0:20002"); // 啟動4個進程對外提供服務 $this->server->count = 4; $handler = \App::make('handlers\WorkermanHandler'); // 連接時回調 $this->server->onConnect = [$handler, 'onConnect']; // 收到客戶端信息時回調 $this->server->onMessage = [$handler, 'onMessage']; // 進程啟動后的回調 $this->server->onWorkerStart = [$handler, 'onWorkerStart']; // 斷開時觸發的回調 $this->server->onClose = [$handler, 'onClose']; // 運行worker Worker::runAll(); } } ~~~ ### 3、創建 `WorkermanHandler.php` 在這個自定義命令還引用了其他的類文件,如 ~~~ $handler = \App::make('handlers\WorkermanHandler'); ~~~ 所以,需要創建一個?`WorkermanHandler.php`?的文件來處理對應的操作 ~~~php <?php namespace handlers; use Workerman\Lib\Timer; // 心跳間隔10秒 define('HEARTBEAT_TIME', 10); class WorkermanHandler { // 處理客戶端連接 public function onConnect($connection) { echo "new connection from ip " . $connection->getRemoteIp() . "\n"; } // 處理客戶端消息 public function onMessage($connection, $data) { // 向客戶端發送hello $data $connection->send('Hello, your send message is: ' . $data); } // 處理客戶端斷開 public function onClose($connection) { echo "connection closed from ip {$connection->getRemoteIp()}\n"; } public function onWorkerStart($worker) { Timer::add(1, function () use ($worker) { $time_now = time(); foreach ($worker->connections as $connection) { // 有可能該connection還沒收到過消息,則lastMessageTime設置為當前時間 if (empty($connection->lastMessageTime)) { $connection->lastMessageTime = $time_now; continue; } // 上次通訊時間間隔大于心跳間隔,則認為客戶端已經下線,關閉連接 if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) { echo "Client ip {$connection->getRemoteIp()} timeout!!!\n"; $connection->close(); } } }); } } ~~~ #### 4、修改 `composer.json` 文件,讓 `app/Protocols` 文件夾下的類文件自動加載。 ~~~ "autoload": { "classmap": [ ... "app/Protocols" ], ... }, ~~~ ##### 5、使用: * 命名名稱是命令文件中的`$signature`的值 ~~~ php artisan 命令名稱 php artisan command:name ~~~ 如果看到以下內容,說明 workerman 服務啟動正常: ~~~ Workerman[artisan] start in DEBUG mode ----------------------- WORKERMAN ----------------------------- Workerman version:3.5.4 PHP version:7.1.4 ------------------------ WORKERS ------------------------------- user worker listen processes status root none tcp://0.0.0.0:20002 1 [OK] ---------------------------------------------------------------- Press Ctrl+C to quit. Start success. ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看