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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                `Master`進程是一個多線程進程,其中有一組非常重要的線程,叫做`Reactor`線程(組),每當一個客戶端連接上服務器的時候,都會由Master進程從已有的Reactor線程中,根據一定規則挑選一個,專門負責向這個客戶端提供維持鏈接、處理網絡IO與收發數據等服務。分包拆包等功能也是在這里完成。 `Manager`進程,某種意義上可以看做一個代理層,它本身并不直接處理業務,其主要工作是將Master進程中收到的數據轉交給Worker進程,或者將Worker進程中希望發給客戶端的數據轉交給Master進程進行發送。 `Manager`進程還負責監控Worker進程,如果Worker進程因為某些意外掛了,Manager進程會重新拉起新的Worker進程,有點像Supervisor的工作。而這個特性,也是最終實現熱重載的核心機制。 `Worker`進程其實就是處理各種業務工作的進程,Manager將數據包轉交給Worker進程,然后Worker進程進行具體的處理,并根據實際情況將結果反饋給客戶端。 我們可以總結出來上面簡單的Server,當客戶端連接的時候這個過程中,三種進程之間是怎么協作的: 1. Client主動Connect的時候,Client實際上是與Master進程中的某個Reactor線程發生了連接。 2. 當TCP的三次握手成功了以后,由這個Reactor線程將連接成功的消息告訴Manager進程,再由Manager進程轉交給Worker進程。 3. 在這個Worker進程中觸發了OnConnect的方法。 4. 當Client向Server發送了一個數據包的時候,首先收到數據包的是Reactor線程,同時Reactor線程會完成組包,再將組好的包交給Manager進程,由Manager進程轉交給Worker。 5. 此時Worker進程觸發OnReceive事件。 6. 如果在Worker進程中做了什么處理,然后再用Send方法將數據發回給客戶端時,數據則會沿著這個路徑逆流而上。 Swoole進程/線程結構圖: ![](https://wiki.swoole.com/static/image/process.jpg) 現在,我們基于上面的例子修改代碼,來看看一個簡單的多進程Swoole Server的幾個基本配置: ``` php <?php $server->set(array( 'demonize' => false,//是否后臺運行 'reactor_num' => 2, 'worker_num' => 4 )); $server -> start(); ``` `reactor_num`:表示Master進程中,Reactor線程總共開多少個,注意,這個可不是越多越好,因為計算機的CPU是有限的,所以一般設置為與CPU核心數量相同,或者兩倍即可。 `worker_num`:表示啟動多少個Worker進程,同樣,Worker進程數量不是越多越好,仍然設置為與CPU核心數量相同,或者兩倍即可。 我們可以在Shell里運行,使用pstree查看進程模型結構: ``` php swoole_tcp_server.php pstree -ap|grep swoole_tcp | | `-php,2505 swoole_tcp_server.php | | |-php,2507 swoole_tcp_server.php | | | |-php,2510 swoole_tcp_server.php | | | |-php,2511 swoole_tcp_server.php | | | |-php,2512 swoole_tcp_server.php | | | `-php,2513 swoole_tcp_server.php ```
                  <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>

                              哎呀哎呀视频在线观看