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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] use Workerman\Protocols\Http\Response; >[danger]注意 >* 除非發送的是chunk或者SSE響應,否則不允許在一個請求里多次發送響應,也就是在一個請求里不允許多次調用`$connection->send()`。 >* 每個請求最終都需要調用一次`$connection->send()`發送響應,否則客戶端會一直等待 >* 當不需要更改HTTP狀態碼(默認200),或者自定義header、cookie時,可以直接向客戶端發送字符串完成響應`$connection->send("this is body");` ``` // $file // ::nitMimeTypeMap():void 初始化mime映射 // init() 執行::initMimeTypeMap // __construct($status=200, $headers=[], $body='') // header($name, $value):Response 設置header // withHeader($name, $value):Response 設置header(對header()的二次封裝) // withHeaders($headers):Response 批量設置header // withoutHeader($name):Response 移出header // getHeader($name):null|array|string 獲取指定header // getHeaders():array 獲取所有header // withStatus($code, $reason_phrase = null):Response 設置http響應碼 // getStatusCode():int 獲取http響應碼 // getReasonPhrase():string 獲取 reason phrase // withProtocolVersion($version):Response 設置協議版本 // withBody($body):Response 設置http正文 // rawBody():string 獲取http原始正文 // withFile($file, $offset = 0, $length = 0):Response 發送文件 // cookie($name, $value = '', $max_age = null, $path = '', $domain = '', $secure = false, $http_only = false, $same_site = ''):Response 設置cookie // __toString() ``` ## 更改狀態碼 ``` use Workerman\Worker; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Protocols\Http\Response; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('http://0.0.0.0:8080'); $worker->onMessage = function(TcpConnection $connection, Request $request) { if ($request->path() === '/404') { // __construct($status,$headers,$body) $connection->send(new Response(404, [], '<h1>抱歉,文件不存在</h1>')); } else { $connection->send('this is body'); } // 當Response類已經初始化后,想更改狀態碼使用下面方法 $response = new Response(200); if ($request->path() === '/404') { $response->withStatus(404); $response->withBody('<h1>抱歉,文件不存在</h1>'); $connection->send($response); } else { $connection->send('this is body'); } }; // 運行worker Worker::runAll(); ``` ## 重定向 ``` use Workerman\Worker; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Protocols\Http\Response; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('http://0.0.0.0:8080'); $worker->onMessage = function(TcpConnection $connection, Request $request) $worker = new Worker('http://0.0.0.0:8080'); $worker->onMessage = function($connection, $request) { $location = '/test_location'; $response = new Response(302, ['Location' => $location]); $connection->send($response); }; Worker::runAll(); ``` ## **發送cookie** **例子** ~~~php use Workerman\Worker; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Protocols\Http\Response; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('http://0.0.0.0:8080'); $worker->onMessage = function(TcpConnection $connection, Request $request) { $response = new Response(200, [], 'this is body'); $response->cookie('name', 'tom'); $connection->send($response); }; // 運行worker Worker::runAll(); ~~~ ##發送文件 同樣的,發送文件需要使用`Workerman\Protocols\Http\Response`響應類。 發送文件時用以下方式 ~~~php $response = (new Response())->withFile($file); $connection->send($response); ~~~ * workerman支持發送超大文件 * 對于大文件(超過2M),workerman不會將整個文件一次性讀入內存,而是在合適的時機分段讀取文件并發送 * workerman會根據客戶端接收速度來優化文件讀取發送速度,保證最快速發送文件的同時將內存占用減少到最低 * 數據發送是非阻塞的,不會影響其它請求處理 * 發送文件時會自動加上`Last-Modified`頭,以便下次請求時服務端判斷是否發送304響應以節省文件傳輸提高性能 * 發送的文件會自動使用合適的`Content-Type`頭發送給瀏覽器 * 如果文件不存在,會自動轉為404響應 **例子** ~~~php use Workerman\Worker; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Protocols\Http\Response; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('http://0.0.0.0:8080'); $worker->onMessage = function(TcpConnection $connection, Request $request) { $file = '/your/path/of/file'; // 檢查if-modified-since頭判斷文件是否修改過 if (!empty($if_modified_since = $request->header('if-modified-since'))) { $modified_time = date('D, d M Y H:i:s', filemtime($file)) . ' ' . \date_default_timezone_get(); // 文件未修改則返回304 if ($modified_time === $if_modified_since) { $connection->send(new Response(304)); return; } } // 文件修改過或者沒有if-modified-since頭則發送文件 $response = (new Response())->withFile($file); $connection->send($response); }; // 運行worker Worker::runAll(); ~~~ ## [發送http chunk數據](https://www.workerman.net/doc/workerman/http/response.html#%E5%8F%91%E9%80%81http%20chunk%E6%95%B0%E6%8D%AE) * 必須先發送一個攜帶`Transfer-Encoding: chunked`頭的Response響應給客戶端 * 發送后續chunk數據使用`Workerman\Protocols\Http\Chunk`類 * 最終必須發送一個空的chunk來結束響應 **例子** ~~~php use Workerman\Worker; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Protocols\Http\Response; use Workerman\Protocols\Http\Chunk; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('http://0.0.0.0:8080'); $worker->onMessage = function(TcpConnection $connection, Request $request) { // 首先發送一個帶Transfer-Encoding: chunked頭的Response響應 $connection->send(new Response(200, array('Transfer-Encoding' => 'chunked'), 'hello')); // 后續Chunk數據用Workerman\Protocols\Http\Chunk類發送 $connection->send(new Chunk('第一段數據')); $connection->send(new Chunk('第二段數據')); $connection->send(new Chunk('第三段數據')); // 最后必須發送一個空的chunk結束響應 $connection->send(new Chunk('')); }; // 運行worker Worker::runAll(); ~~~
                  <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>

                              哎呀哎呀视频在线观看