亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

常見(jiàn)問(wèn)題

如何處理靜態(tài)資源

Apache URl rewrite

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  # RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]  fcgi下無(wú)效
  RewriteRule ^(.*)$  http://127.0.0.1:9501/$1 [QSA,P,L]
   # 請(qǐng)開(kāi)啟 proxy_mod proxy_http_mod request_mod
</IfModule>

Nginx URl rewrite

server {
    root /data/wwwroot/;
    server_name local.swoole.com;
    location / {
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
        proxy_set_header X-Real-IP $remote_addr;
        if (!-f $request_filename) {
             proxy_pass http://127.0.0.1:9501;
        }
    }
}

Swoole 靜態(tài)文件處理器

詳細(xì)請(qǐng)可查看 配置文件 章節(jié)

修改配置文件的 dev.php 或者 produce.php,實(shí)現(xiàn) Swoole 對(duì)靜態(tài)文件進(jìn)行處理。

<?php

return [
    // ...... 這里省略
    'MAIN_SERVER' => [
        // ...... 這里省略
        'SETTING' => [
            // ...... 這里省略

            # 設(shè)置處理 Swoole 靜態(tài)文件
            'document_root' => EASYSWOOLE_ROOT . '/Static/',
            'enable_static_handler' => true,
        ],
        // ...... 這里省略
    ],
    // ...... 這里省略
];

上述配置是假設(shè)你的項(xiàng)目根目錄有個(gè) Static 目錄是用來(lái)放置靜態(tài)文件的。具體的使用可查看 https://wiki.swoole.com/#/http_server?id=document_root

關(guān)于跨域處理

在框架的初始化事件 initialize 事件 中進(jìn)行注冊(cè)。

注冊(cè)示例代碼如下:

public static function initialize()
{
    date_default_timezone_set('Asia/Shanghai');

    // onRequest v3.4.x+
    \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_ON_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response) {
        $origin = $request->getHeader('origin')[0] ?? '*';
        $response->withHeader('Access-Control-Allow-Origin', $origin);
        $response->withHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
        $response->withHeader('Access-Control-Allow-Credentials', 'true');
        $response->withHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, token');
        if ($request->getMethod() === 'OPTIONS') {
             $response->withStatus(\EasySwoole\Http\Message\Status::CODE_OK);
             return false;
        }
        return true;
    });
}

EasySwoole 3.4.x 版本之前:可在項(xiàng)目根目錄的 EasySwooleEvent.php 中看到 onRequestafterRequest 方法.

如何獲取 $HTTP_RAW_POST_DATA

$content = $this->request()->getBody()->__toString();
$raw_array = json_decode($content, true);

如何獲取客戶(hù)端 IP

舉例,如何在控制器中獲取客戶(hù)端 IP

// 真實(shí)地址
// 獲取連接的文件描述符
$fd = $this->request()->getSwooleRequest()->fd;
$ip = \EasySwoole\EasySwoole\ServerManager::getInstance()->getSwooleServer()->connection_info($fd);
var_dump($ip);

// header 地址,例如經(jīng)過(guò) nginx proxy 后
$ip2 = $this->request()->getHeaders();
var_dump($ip2);

HTTP 狀態(tài)碼總為500

自 swoole 1.10.x2.1.x 版本起,執(zhí)行 http server 回調(diào)中,若未執(zhí)行 response->end(),則全部返回 500 狀態(tài)碼

如何 setCookie

調(diào)用 response 對(duì)象的 setCookie 方法即可設(shè)置 cookie。setCookie 方法和原生 setcookie 用法一致。

$this->response()->setCookie('name', 'value');

更多操作可看 Response 對(duì)象

如何自定義 App 命名空間對(duì)應(yīng)目錄

只需要修改項(xiàng)目根目錄的 composer.json 的自動(dòng)加載的 App 命名空間對(duì)應(yīng)的目錄即可,然后執(zhí)行 composer dumpautolaod -o 注冊(cè)就行。

{
    // ... 這里省略
    "autoload": {
        "psr-4": {
            "App\\": "Application/"
        }
    }
}

如何啟用 Https

通常建議使用 Nginx 或者 Lb 來(lái)配置證書(shū),將 https 請(qǐng)求解析為 http 反代到 swoole

如果你僅是測(cè)試使用,可以在配置文件 (dev.php 或者 produce.php) 中添加和修改以下配置來(lái)啟用https。

<?php

return [
    // ...... 這里省略
    'MAIN_SERVER' => [
        // ...... 這里省略
        'SOCK_TYPE' => SWOOLE_TCP | SWOOLE_SSL, // 默認(rèn)是 SWOOLE_TCP
        'SETTING' => [
            'ssl_cert_file' => '證書(shū)路徑,僅支持.pem格式',
            'ssl_key_file' => '私鑰路徑',
        ]
        // ...... 這里省略
    ],
    // ...... 這里省略
];

詳細(xì)請(qǐng)可查看 配置文件 章節(jié)

DNS Lookup resolve timeout 錯(cuò)誤

該錯(cuò)誤一般存在于 http 客戶(hù)端并發(fā)調(diào)用時(shí)產(chǎn)生,原因是 dns 效率慢,導(dǎo)致多線(xiàn)程獲取 dns 時(shí)超時(shí),包括不限于以下場(chǎng)景:

  • mysql host 設(shè)置為域名形式,并且設(shè)置最小連接高于 2(很難看到,一般是 10 才會(huì)偶爾報(bào)錯(cuò))
  • HTTPClient 多個(gè)協(xié)程同時(shí)并發(fā)
  • csp 并發(fā)編程 等

解決方法為:
在并發(fā)之前,預(yù)先使用 Swoole\Coroutine::gethostbyname('www.baidu.com'); 去查詢(xún)一次dns ip,swoole 底層才會(huì)自動(dòng)緩存該 ip。

例如:

Swoole\Coroutine::gethostbyname('www.baidu.com');
for ($j = 0; $j < 100; $j++) {
    go(function () use ($j) {
        for ($i = 0; $i < 1000; $i++) {
            $client = new Swoole\Coroutine\Http\Client('www.baidu.com', 443, true);
            $client->get('/');
            if (empty($client->errMsg)) {
//var_dump($client->getBody());
            } else {
                var_dump($client->errMsg);
            }
        }
    });
}

CURL 發(fā)送 POST請(qǐng)求 EasySwoole 服務(wù)器端超時(shí)

  • 出現(xiàn)原因:CURL 在發(fā)送較大的 POST 請(qǐng)求(例如: 上傳文件)時(shí)會(huì)先發(fā)一個(gè) 100-continue 的請(qǐng)求,如果收到服務(wù)器的回應(yīng)才會(huì)發(fā)送實(shí)際的 POST 數(shù)據(jù)。而 swoole_http_server(即 EasySwooleHttp 主服務(wù)) 不支持 100-continue,就會(huì)導(dǎo)致 CURL 請(qǐng)求超時(shí)。
  • 解決方法:

方法1:關(guān)閉 CURL100-continue,在 CURLHeader 中配置關(guān)閉 100-continue 選項(xiàng)。

示例代碼(php):

<?php
// 創(chuàng)建一個(gè)新cURL資源
$ch = curl_init();
// 設(shè)置URL和相應(yīng)的選項(xiàng)
curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1:9501");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1); // 設(shè)置為POST方式
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // 關(guān)閉 `CURL` 的 `100-continue`
curl_setopt($ch, CURLOPT_POSTFIELDS, array('test' => str_repeat('a', 800000)));// POST 數(shù)據(jù)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

方法2:使用 Nginx 做前端代理,由 Nginx 處理 100-Continue(針對(duì)無(wú)法關(guān)閉 100-continue時(shí))

http 服務(wù)中公共函數(shù)如何引入

很多開(kāi)發(fā)小伙伴在開(kāi)發(fā)過(guò)程中可能遇到疑惑,在 EasySwoole 怎么像 ThinkPHP 框架那樣引入自定義的公共函數(shù),接下來(lái)簡(jiǎn)單說(shuō)明下引入方法,這邊推薦借助 composer 的自動(dòng)加載機(jī)制 (Files)實(shí)現(xiàn)。

修改項(xiàng)目根目錄的 composer.json 文件的 autoload.files 選項(xiàng),示例如下:

{
    // ... 這里省略
    "autoload": {
        // ... 這里省略
        "files": ["App/Common/functions.php"]
    }
}

然后新建文件 App\Common\functions.php,在 functions.php 中編寫(xiě)自己的自定義函數(shù),再在項(xiàng)目根目錄執(zhí)行 composer dumpautoload 完成自動(dòng)加載,就可以在框架的任意位置進(jìn)行調(diào)用函數(shù)了。

示例如下:

<?php
// functions.php
if (!function_exists('helloEasySwoole')) {
    function helloEasySwoole()
    {
        echo 'Hello EasySwoole!';
    }
}

// ... 更多自定義函數(shù)

調(diào)用示例:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;

class Index extends Controller
{
    function index()
    {
        \helloEasySwoole();
    }
}

自定義函數(shù)都可以放在這個(gè)文件中。

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    精品福利电影| 高清一区二区三区视频| 欧美不卡1区2区3区| 国产日韩精品久久| 在线综合视频网站| 精品一区二区三区视频日产| 亚洲激情精品| 在线观看一区二区三区三州| 国内精品二区| 999在线免费观看视频| 黄色工厂这里只有精品| 亚洲国产欧洲综合997久久| 国产伦精品一区二区三区免| 亚洲一区网站| 最新国产拍偷乱拍精品| 一区二区三区四区五区精品| 精品国产二区在线| av噜噜色噜噜久久| 亚洲欧美日产图| 国产欧美丝袜| 中文字幕久久综合| 中文一区二区| 在线精品一区| 欧美三级网页| 欧美jizzhd精品欧美巨大免费| 欧美二级三级| 欧洲精品久久| 欧美日韩一区二| 免费久久久一本精品久久区| 国产一区二区视频在线免费观看| 裸体素人女欧美日韩| 国产亚洲高清视频| 亚洲全部视频| 国产精品裸体一区二区三区| 亚洲麻豆一区| 99成人精品| 国产午夜精品一区二区三区欧美| 一区二区毛片| 免费看黄裸体一级大秀欧美| 亚洲一区影院| 91九色偷拍| 国产精品jizz视频| 久久99精品久久久久久青青日本 | 国产综合色一区二区三区| 91久久精品国产91久久性色tv| 国产欧美在线| 久久一区国产| 国产一区二区高清| 国产精品一卡| 91情侣在线视频| 精品国产区在线| 欧美最大成人综合网| 九九九九精品| 中文字幕日韩精品一区二区| 99porn视频在线| 国产传媒欧美日韩| 久久久久久九九| 日韩hmxxxx| 欧美精品啪啪| 亚洲一区二区三区精品在线观看| 亚洲欧美bt| 精品国产一区二区三| 欧美激情www| 欧美日本一区二区视频在线观看 | 五月天亚洲综合小说网| 午夜精品免费| 国产伦理一区| 久久狠狠久久综合桃花| 一区二区三区电影| 99精品国产高清一区二区 | 在线播放豆国产99亚洲| 激情综合激情| 国产精品亚洲综合| 亚洲一区二区在线看| 亚洲国产日韩欧美| 国产激情一区二区三区在线观看| 日韩欧美在线一区二区| 影音先锋亚洲电影| 国产成人一区二区三区免费看| 欧美一区二区福利| 亚洲欧洲三级| 韩国成人av| 狠狠入ady亚洲精品经典电影| 免费视频一区二区三区在线观看| 久久久久天天天天| 亚洲第一黄网| 久久国产精品99久久久久久丝袜| 欧美精品偷拍| 成人黄色片视频网站| 一本一生久久a久久精品综合蜜| 宅男噜噜噜66一区二区 | 在线视频观看日韩| 精品国产区在线| 亚洲福利一区| 免费久久99精品国产自| 日韩午夜av| 日本高清一区| 久久只有精品| 正义之心1992免费观看全集完整版| 亚洲一区二区三区色| 亚洲午夜久久久影院伊人| 亚洲欧美大片| 欧美日韩国产综合网| julia一区二区中文久久94| 欧美久久视频| 久久国产精品久久| 性高湖久久久久久久久| 欧美影院一区| 久久综合精品一区| 嫩草成人www欧美| 一区二区三区欧美成人| 国产高清精品一区二区| 亚洲国产一区二区三区高清 | 中文日韩在线| 女人色偷偷aa久久天堂| 久久大片网站| 老司机精品福利视频| 激情六月综合| 国模精品一区二区三区| 色综合久久av| 日本在线观看一区| 国产日韩久久| 牛牛国产精品| 日韩精品欧美专区| 国产日韩欧美精品| 久久国产日韩欧美| 亚洲国产精品综合| 欧美va亚洲va日韩∨a综合色| 欧美精品亚洲精品| 国产精品xxxx| 久久九九电影| 国产精品色网| 亚洲日本无吗高清不卡| 欧美日本在线| 正义之心1992免费观看全集完整版| 久久大香伊蕉在人线观看热2| av免费观看久久| 久久久噜噜噜| 久久综合九色| 蜜桃久久av| 久久蜜桃资源一区二区老牛| 国产一级精品aaaaa看| 在线成人亚洲| 在线观看成人av电影| 欧美特黄视频| 欧美日韩国产高清| 欧美日本不卡| 国产精品一区而去| 欧美日韩日本网| 国产精品swag| 国产伦精品一区二区三区视频黑人| 久久裸体视频| 91在线在线观看| 99一区二区| 国产欧美日本在线| 国产伦理久久久| 久久偷看各类wc女厕嘘嘘偷窃| 国产美女精品久久久| 精品久久精品久久| 欧美日本韩国在线| 亚洲高清视频一区二区| 亚洲一区二区三区免费观看| 亚洲一区二区不卡视频| 欧美不卡福利| 在线免费高清一区二区三区| 亚洲欧洲日本一区二区三区| 国产日韩免费| 99视频国产精品免费观看| 国产伦精品一区二区三区四区视频| 精品999在线观看| 日本午夜精品电影 | 亚洲欧洲在线一区| 西西裸体人体做爰大胆久久久| 久久久水蜜桃av免费网站| 99久久精品无码一区二区毛片| 精品视频一区在线| 一区二区三区四区视频在线观看| 午夜精品区一区二区三| 久热精品视频| 99热免费精品在线观看| 国产精品久久777777毛茸茸| 美女精品在线| 欧美久久久久久一卡四| 欧美在线国产| 午夜亚洲激情| 欧美成人综合一区| 中文字幕欧美人与畜| 在线一区免费观看| 国产一区二区三区黄| 伊人久久大香线蕉综合75| 亚洲精品欧洲| 国产亚洲一区二区三区在线播放| 日本不卡二区高清三区| 一区久久精品| 国产精品xxx在线观看www| 亚洲免费视频一区| 国产一区二区三区奇米久涩| 美脚丝袜一区二区三区在线观看| 欧美在线国产| 99re视频在线观看|