课程表

Swoole基础

Swoole实例

工具箱
速查手册

Swoole HttpServer实例

当前位置:免费教程 » 程序设计 » Swoole

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

常见使用场景:因为swoole是在cli命令下执行的,在传统通过nginx+fastcgi模式下很多root的shell无法执行,而使用这个swoole服务器就很好的控制rsync,git,svn等。

  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();

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

简单实例:

  1. $serv = new Swoole\Http\Server("127.0.0.1", 9502);
  2. $serv->on('Request', function($request, $response) {
  3. var_dump($request->get);
  4. var_dump($request->post);
  5. var_dump($request->cookie);
  6. var_dump($request->files);
  7. var_dump($request->header);
  8. var_dump($request->server);
  9. $response->cookie("User", "Swoole");
  10. $response->header("X-Server", "Swoole");
  11. $response->end("<h1>Hello Swoole!</h1>");
  12. });
  13. $serv->start();

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

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

使用Http2协议

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

设置http服务器的open_http2_protocoltrue

  1. $serv->set([
  2. 'ssl_cert_file' => $ssl_dir . '/ssl.crt',
  3. 'ssl_key_file' => $ssl_dir . '/ssl.key',
  4. 'open_http2_protocol' => true,
  5. ]);

nginx+swoole配置

  1. server {
  2. root /data/wwwroot/;
  3. server_name local.swoole.com;
  4. location / {
  5. if (!-e $request_filename) {
  6. proxy_pass http://127.0.0.1:9501;
  7. proxy_http_version 1.1;
  8. proxy_set_header Connection "keep-alive";
  9. }
  10. }
  11. }

异步Http/WebSocket客户端

Swoole-1.8.0版本增加了对异步Http/WebSocket客户端的支持。底层是用纯C编写,拥有超高的性能。

异步HTTP客户端目前仍在实验阶段,请谨慎使用

启用Http客户端

  • 1.8.6版本之前,需要在编译swoole时增加--enable-async-httpclient来开启此功能。
  • swoole_http_client不依赖任何第三方库
  • 支持Http-Chunk、Keep-Alive特性,暂不支持form-data格式
  • Http协议版本为HTTP/1.1
  • gzip压缩格式支持需要依赖zlib库

构造方法

  1. function swoole_http_client->__construct(string $ip, int port, bool $ssl = false);
  • $ip 目标服务器的IP地址,可使用swoole_async_dns_lookup查询域名对应的IP地址
  • $port 目标服务器的端口,一般http为80,https为443
  • $ssl 是否启用SSL/TLS隧道加密,如果目标服务器是https必须设置$ssl参数为true
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号