<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>

                ## **毫秒定時器** 毫秒精度的定時器。底層基于epoll\_wait和setitimer實現,數據結構使用最小堆,可支持添加大量定時器。 * 在同步 IO 進程中使用`setitimer`和信號實現,如`Manager`和`TaskWorker`進程 * 在異步 IO 進程中使用`epoll_wait`/`kevent`/`poll`/`select`超時時間實現 ~~~ <?php namespace server; class HttpServer { protected $serv = null; //Swoole\Server對象 protected $host = '0.0.0.0'; //監聽對應外網的IP 0.0.0.0監聽所有ip protected $port = 9603; //監聽端口號 public function __construct() { $this->serv = new \Swoole\Http\Server($this->host, $this->port); //設置參數 //如果業務代碼是全異步 IO 的,worker_num設置為 CPU 核數的 1-4 倍最合理 //如果業務代碼為同步 IO,worker_num需要根據請求響應時間和系統負載來調整,例如:100-500 //假設每個進程占用 40M 內存,100 個進程就需要占用 4G 內存 $this->serv->set(array( 'worker_num' => 4, //設置啟動的worker進程數。【默認值:CPU 核數】 'max_request' => 10000, //設置每個worker進程的最大任務數。【默認值:0 即不會退出進程】 'task_worker_num' => 4, //設置異步任務的工作進程數量 'daemonize' => 0, //開啟守護進程化【默認值:0】 'task_enable_coroutine' => true //設置工作進程支持協程 )); //監聽服務器啟動事件 $this->serv->on('start', function ($server) { echo "Swoole http server is started"; }); //監聽請求,HTTP服務器只需要關注請求響應即可 //當有新的 HTTP 請求進入就會觸發此事件 //$request 對象,包含了請求的相關信息 //$response 對象,對 request 的響應可以通過操作 response 對象來完成。 //$response->end() 方法表示輸出一段 HTML 內容,并結束此請求 $this->serv->on('request', function ($request, $response) { // 使用 Chrome 瀏覽器訪問服務器,會產生額外的一次請求,/favicon.ico,可以在代碼中響應 404 錯誤。 if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') { $response->end(); return; } //投遞異步任務 $data = [ 'task' => 'timer' ]; $task_id = $this->serv->task($data); $response->end(); }); //處理異步任務(此回調函數在task進程中執行) //$task_id 任務ID //$reactor_id 進程ID //$data 傳遞過來的參數 $this->serv->on('task', function ($serv, \Swoole\Server\Task $task) { //定時器Swoole\Timer::tick(int $msec, callable $callback_function, ...$params): int; //int $msec 指定時間,值單位:毫秒 //$callback_function 回調函數 \Swoole\Timer::tick(3000, function (int $timer_id, $param1, $param2) { echo "timer_id #$timer_id, after 3000ms.\n"; echo "param1 is $param1, param2 is $param2.\n"; }, "A", "B"); // 告訴work進程 $task->finish([123, 'hello']); }); //處理異步任務的結果(此回調函數在worker進程中執行) //$task_id 任務ID //$data [onTask]事件返回的數據 $this->serv->on('finish', function ($serv, $task_id, $data) { var_dump($data); echo "AsyncTask[$task_id] Finish".PHP_EOL; }); //啟動服務 $this->serv->start(); } } $httpServer = new HttpServer(); ~~~ ## **運行結果** ![](https://img.kancloud.cn/2f/2d/2f2d930c11cf6555af164c608302d824_659x384.png)
                  <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>

                              哎呀哎呀视频在线观看