首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用PHP编写HTTP服务器

PHP最初作为一个专门为Web开发量身定制的语言,本身提供了底层的语法、函数和机制让我们拥有了超高的Web开发效率,使用PHP就相当于使用其他语言附加上了一个Web框架。我们拥有非常好用的$_GET, $_POST超全局数组,以及非常令人省心的单进程模型:每次请求对应一个进程,让我们无需理会线程安全、微小的内存泄漏和资源的清理。但是这些优点像我们屏蔽了一些底层的细节。追根溯源,回到Web开发的源头,使用PHP实现一个HTTP服务器并且运行PHP业务代码,应该是一件很有趣的事情, 这有助于我们理解HTTP协议和HTTP服务器的工作原理,以及HTTP服务器是怎样与PHP配合工作。

在这篇文章中我将会介绍如何用PHP实现一个可以运行内置Web框架的HTTP服务器。先从如何实现一个Socket服务器接收网络请求开始, 探究如何解析HTTP协议,处理HTTP请求和返回响应。接下来结合多进程拓展实现一个多进程的服务模型, 再结合Libevent实现一个事件驱动的非阻塞网络调用。为了限制请求的数量,实现对资源的合理分配和使用,我们会建立一个工作的进程池来处理请求队列。最后我会使用Symfony/Console编写一个命令行程序和守护进程用来管理HTTP Server。

需要注意的是这个项目仅仅作为PHP Web框架的容器服务器。为了简化开发,这个服务器不会支持完整的HTTP协议,所以会使用Nginx作为反向代理服务器来支持完整的HTTP协议。

一个简单的Socket Server (套接字服务器)

解析HTTP协议

基于Pcntl拓展的多进程工作模型

及时关闭连接

使用libevent事件驱动

多进程工作模型拓展:工作进程池

编写守护进程和命令行参数

使用Nginx作为反向代理服务器

后记

如果你对使用PHP进行网络编程感兴趣,我推荐Workman和Swoole这两个项目。 前者是使用纯PHP代码实现的网络库,后者是 韩天峰 开发的PHP拓展。二者都支持开发Socket/WebSocket/Http Server。

更多分享,敬请关注

本文来源网络,侵立删!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125A0423E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券