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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Coroutine Swoole在`2.0`開始內置**協程(Coroutine)**的能力,提供了具備協程能力IO接口(統一在命名空間`Swoole\Coroutine\*`)。 > `2.0.2`或更高版本已支持`PHP7` > `2.0.8`或更高版本已默認開啟`--enable-coroutine`,可使用`--disable-coroutine`關閉協程特性 >從2.0.12版本開始不再支持PHP5 --- > `4.0.0`或更高版本僅支持PHP7.1及以上版本,`4.0.1`版本開始去除了`--enable-coroutine`編譯選項, 改為動態配置 > enable_coroutine動態配置請見[文檔](https://wiki.swoole.com/wiki/page/949.html) 協程可以理解為純用戶態的線程,其通過**協作**而不是搶占來進行切換。相對于進程或者線程,協程所有的操作都可以在用戶態完成,創建和切換的消耗更低。Swoole可以為每一個請求創建對應的協程,根據IO的狀態來合理的調度協程,這會帶來了以下優勢: 1. 開發者可以無感知的用同步的代碼編寫方式達到異步IO的效果和性能,避免了傳統異步回調所帶來的離散的代碼邏輯和陷入多層回調中導致代碼無法維護。 2. 同時由于swoole是在底層封裝了協程,所以對比傳統的php層協程框架,開發者不需要使用yield關鍵詞來標識一個協程IO操作,所以不再需要對yield的語義進行深入理解以及對每一級的調用都修改為yield,這極大的提高了開發效率。 協程API目前針對了TCP,UDP等主流協議client的封裝,包括: - UDP - TCP - HTTP - Mysql - Redis 可以滿足大部分開發者的需求。對于私有協議,開發者可以使用協程的TCP或者UDP接口去方便的封裝。 ## 啟用 ### 環境要求: * PHP版本要求:**>= 7.0**,包括7.0、7.1、7.2 * 基于`swoole_server`或者`swoole_http_server`進行開發,目前只支持在`onRequet`, `onReceive`, `onConnect`等事件回調函數中使用協程。 `swoole_server`和`swoole_http_server`將為每一個請求創建對應的協程,開發者可以在`onRequet`、`onReceive`、`onConnect` 事件回調中使用協程客戶端。 ### 相關配置 在`Swoole\Server`的`set`方法中增加了一個配置參數`max_coro_num`,用于配置一個`Worker`進程最多同時處理的協程數目。因為隨著`Worker`進程處理的協程數目的增加,其占用的內存也會增加,為了避免超出php的`memory_limit`限制,請根據實際業務的壓測結果設置該值,默認為`3000`。 ## 使用示例 ```php $http = new swoole_http_server("127.0.0.1", 9501); $http->on("request", function ($request, $response) { $client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP); $client->connect("127.0.0.1", 8888, 0.5); //調用connect將觸發協程切換 $client->send("hello world from swoole"); //調用recv將觸發協程切換 $ret = $client->recv(); $response->header("Content-Type", "text/plain"); $response->end($ret); $client->close(); }); $http->start(); ``` 當代碼執行到`connect()和recv()`函數時,swoole會觸發進行協程切換,此時swoole可以去處理其他的事件或者接受新的請求。當此client`連接`成功或者后端服務`回包`后,swoole server會恢復協程上下文,代碼邏輯繼續從切換點開始恢復執行。開發者整個過程不需要關心整個切換過程。具體使用可以參考client的文檔。 ## 注意事項 1. 全局變量:協程使得原有的異步邏輯同步化,但是在協程的切換是隱式發生的,所以在協程切換的前后不能保證全局變量以及static變量的一致性。 2. 請勿在**2.2以下的版本**的以下場景中觸發協程切換: * 析構函數 * 魔術方法`__call()` `__get()` `__set()` 等 3. 與xdebug、xhprof、blackfire等zend擴展不兼容,例如不能使用xhprof對協程server進行性能分析采樣。 協程組件 --------- 1. TCP/UDP Client:`Swoole\Coroutine\Client` 2. HTTP/WebSocket Client:`Swoole\Coroutine\HTTP\Client` 3. HTTP2 Client:`Swoole\Coroutine\HTTP2\Client` 4. Redis Client:`Swoole\Coroutine\Redis` 5. Mysql Client:`Swoole\Coroutine\MySQL` 6. Postgresql Client:`Swoole\Coroutine\PostgreSQL` * 在協程`Server`中需要使用協程版`Client`,可以實現全異步`Server` * 其他程序中可以使用`go`關鍵詞手工創建協程 * 同時`Swoole`提供了協程工具集:`Swoole\Coroutine`,提供了獲取當前協程`id`,反射調用等能力。
                  <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>

                              哎呀哎呀视频在线观看