swoole的http服务

PHP实现基于Swoole简单的HTTP服务器

引用Swoole官方定义:php

PHP语言的异步、并行、高性能网络通讯框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库链接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。Swoole能够普遍应用于互联网、移动通讯、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。使用PHP+Swoole做为网络通讯框架,可使企业IT研发团队的效率大大提高,更加专一于开发创新产品。html

在这里简述swoole两种API编写简单HTTP服务器。前端

swoole_server

使用swoole_server API,构建HTTP服务器,4个步骤:git

  1. 构建Server对象
  2. 设置运行时参数
  3. 注册事件回调函数
  4. 启动服务器

直接代码体现,新建server.phpgithub

<?php //1.构建Server对象 $serv = new swoole_server("0.0.0.0", 9501); //2.设置运行时参数 $serv->set(array( 'worker_num' => 8, 'daemonize' => 0, 'max_request' => 10000, 'dispatch_mode' => 2, 'debug_mode'=> 1, )); //3.注册事件回调函数 $serv->on('Receive', function($serv, $fd, $from_id, $data){ $respData='<h1>Hello Swoole.</h1>'; response($serv,$fd,$respData);//封装并发送HTTP响应报文 }); //4.启动服务器 $serv->start(); 

如何封装HTTP响应报文?首先你得知道HTTP响应报文的组成结构,以下图
http_response_body数据库

知道了响应报文的组成结构,那个人响应报文应该是这样的:浏览器

HTTP/1.1 200
Server:SwooleServer Content-Type:text/html;charset=utf8 Content-Length:13 <h1>Hello Swoole.</h1>

代码实现。服务器

/** * 发送内容 * @param \swoole_server $serv * @param int $fd * @param string $respData * @return void */ function response($serv,$fd,$respData){ //响应行 $response = array( 'HTTP/1.1 200', ); //响应头 $headers = array( 'Server'=>'SwooleServer', 'Content-Type'=>'text/html;charset=utf8', 'Content-Length'=>strlen($respData), ); foreach($headers as $key=>$val){ $response[] = $key.':'.$val; } //空行 $response[] = ''; //响应体 $response[] = $respData; $send_data = join("\r\n",$response); $serv->send($fd, $send_data); }

到此,一个简单响应Hello Swoole.的HTTP服务器就完成了。完整代码:
(访问不了gist?配置本地hosts文件: 192.30.252.141 gist.github.com )swoole

运行 php server.php,浏览器访问http://127.0.0.1:9501/,固然咱们经常使用Nginx做为前端代理,设一个测试域名www.server.com,本地设置hosts映射,就能经过域名来访问了。Nginx配置
注意:当响应报文格式不正确时,浏览器页面会一直转菊花,等待请求返回...网络

再后来,有了swoole_http_server,HTTP服务器代码就变得更加简单了!

swoole_http_server

<?php $http = new swoole_http_server("127.0.0.1", 9501); $http->on('request', function ($request, $response) { $html = "<h1>Hello Swoole.</h1>"; $response->end($html); });

没错,就这几行代码就实现了。再也不须要封装响应报文。swoole_http_server 继承于 swoole_server,是swoole内置Http服务器的支持,经过几行代码便可写出一个异步非阻塞多进程的Http服务器。

Notice:swoole_http_server对Http协议的支持并不完整,建议仅做为应用服务器。而且在前端增长Nginx做为代理
相关文章
相关标签/搜索