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

引用Swoole官方定义:

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

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

swoole_server

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

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

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

<?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/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 )

运行 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作为代理

最新文章

  1. [转载] 不查资料确定int型整数的最大值和最小值
  2. java build path-&gt;source folder分析
  3. PowerDesigner生成SQL Server 2008脚本注释乱码的问题
  4. VC 实现文件与应用程序关联(转载)
  5. IntelliJ IDEA使用SSH功能
  6. RunJS - 在线编辑、展示、分享、交流你的 JavaScript 代码
  7. linux配置JDK(转载)
  8. QTestLib Tutorial
  9. [Codeforces 940E]Cashback
  10. JaveScript基础(3)之正则表达式
  11. pthread_cond_wait学习笔记
  12. mac上Docker安装&amp;初体验
  13. 好久没考虑过的 sql 注入
  14. [20180503]珅与分隔符.txt
  15. 面转栅格之ERROR 999999:执行函数时出错
  16. 【pyqtgraph绘图】安装pyqtgraph
  17. 吴裕雄 18-MySQL GROUP BY 语句
  18. Phong和Blinn-Phong光照模型
  19. MySql详解(七)
  20. (C++)关于拷贝构造函数 Copy Constructor

热门文章

  1. IP、操作系统、移动OS
  2. C#比較对象的相等性
  3. C# 字节数组拼接的速度实验(Array.copy(),Buffer.BlockCopy(),Contact())
  4. mysql忘记password
  5. u-boot 学习系列 1 - SPL
  6. linux uart驱动&mdash;&mdash;uart原理(一)
  7. 部署mongodb中需要注意的调参
  8. 大数据:Hive常用参数调优
  9. Codeforces 390E Inna and Large Sweet Matrix 树状数组改段求段
  10. 用变量a给出下面的定义。[中国台湾某著名CPU生产公司2005年面试题]