讨论完了TCP服务器,接下来的话题就是HTTP服务器。HTTP这个协议“一般”是搭载在TCP协议上实现的。
注意,这里用“一般”是以前多数是这样做的,在“HTTP协议白皮书”中没有规定HTTP协议底层要搭载在哪种协议上,而且在HTTP3(由谷歌QUIC进化而成)所在的传输层就是搭载在UDP协议上。所以千成别认为HTTP协议底层是TCP!
讨论Swoole中的Http服务器的过程中,我们只需要把握以下三点:
-SwooleHttpServer 继承自 SwooleServer,所以TCP服务器所有的配置项、函数、事件在Http服务器中都可以使用,进程模型也是一致的。
-SwooleHttpServer对 HTTP 协议的支持并不完整,一定要作为应用服务器处理动态请求。并且在前端增加 Nginx 作为代理。
-HTTP 服务器只需要关注请求响应即可,所以只需要监听一个 onRequest 事件。当有新的 HTTP 请求进入就会触发此事件,事件回调函数有 2 个参数,一个是 $request 对象,包含了请求的相关信息,如 GET/POST 请求的数据。。
有了以上三点,我们对一Http服务器的学习难度就大大降低了。
示例:
$http = new SwooleHttpServer('0.0.0.0', 9501); $http->on('request', function ($request, $response) { var_dump($request->server); $response->header("Content-Type", "text/html; charset=utf-8"); $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>"); }); $http->start();
效果图:
是不是很简单?所有的工作都在onRequest事件中展开,实现应答式的短连接交互。
HTTP初步实验到这里结束,大家下一篇再见:)
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。