• Http\Server
    • 使用Http2协议
    • nginx+swoole配置

    Http\Server

    Http\ServerHttp协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理

    1.7.7版本增加了内置Http服务器的支持,通过几行代码即可写出一个异步非阻塞多进程的Http服务器。

    1. $http = new Swoole\Http\Server("127.0.0.1", 9501);
    2. $http->on('request', function ($request, $response) {
    3. $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
    4. });
    5. $http->start();

    通过使用apache bench工具进行压力测试,在Inter Core-I5 4核 + 8G内存的普通PC机器上,Http\Server可以达到近11QPS。远远超过php-fpmGolangNode.js自带Http服务器。性能几乎接近与Nginx的静态文件处理。

    1. ab -c 200 -n 200000 -k http://127.0.0.1:9501/

    使用Http2协议

    • 需要依赖nghttp2库,下载nghttp2后编译安装
    • 使用SSL下的Http2协议必须安装openssl, 且需要高版本openssl必须支持TLS1.2ALPNNPN
    • 使用HTTP2不一定要开启SSL
    1. ./configure --enable-openssl --enable-http2

    设置http服务器的open_http2_protocoltrue

    1. $serv = new Swoole\Http\Server("127.0.0.1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
    2. $serv->set([
    3. 'ssl_cert_file' => $ssl_dir . '/ssl.crt',
    4. 'ssl_key_file' => $ssl_dir . '/ssl.key',
    5. 'open_http2_protocol' => true,
    6. ]);

    nginx+swoole配置

    1. server {
    2. root /data/wwwroot/;
    3. server_name local.swoole.com;
    4. location / {
    5. proxy_http_version 1.1;
    6. proxy_set_header Connection "keep-alive";
    7. proxy_set_header X-Real-IP $remote_addr;
    8. if (!-e $request_filename) {
    9. proxy_pass http://127.0.0.1:9501;
    10. }
    11. }
    12. }
    通过读取$request->header['x-real-ip']来获取客户端的真实IP