PHP网络通信引擎的选择
- 发表于
- PHP
PHP、移动应用方向的中小项目开发核心主要围绕在功能、交互、性能、引擎上,其中引擎在一定场景下决定了一个系统的灵活性和构架维度。
网络通信引擎
网络通信引擎的选择尤为重要,通信引擎可用于互联网、车联网、物联网(IOT)、移动通信、云计算、网络游戏、手机APP、智能家居、微信小程序,聊天室、硬件通讯等场景。围绕这个话题简单聊聊三个方向:长轮询/Swoole/Workerman。
长轮询(LongPoll)
对于不涉及移动端app的项目(或包含移动端API项目),我们可使用简单的长轮询(LongPoll)具体看:Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)。但这样的解决方案明显性能差很多,适用场景也很有限。如何理一步优化呢?
Swoole
官方介绍:
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
除了异步IO的支持之外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发HashTable,Channel,Lock,进程间通信IPC等丰富的功能特性。
Swoole2.0支持了类似Go语言的协程,可以使用完全同步的代码实现异步程序。PHP代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。
Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。
我在一部分项目使用了Swoole,基于它的底层构架可更好的扩展。性能上Swoole毕竟是C语言开发的,在某些地方如内存管理、数据结构、通信协议解析上肯定要比PHP开发的workerman高。
Swoole在文档上相对缺乏,但基本的教程是有的。
Workerman
什么是Workerman
Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。
Workerman支持的特性
- 纯PHP开发,多进程支持,支持php7,支持hhvm
- 支持TCP/UDP,单机可支持数百万以上TCP长连接
- 支持分布式部署,集群能支持数百万甚至更高的并发TCP连接
- 支持libevent事件触发网络库
- 支持热更新及服务器平滑重启
- 拥有异步Mysql、Redis、Dns等众多高性能组件
我在大部分有需求的项目中使用了Workerman,很多人在讨论Swoole和Workerman时经常说,Swoole更高级、更强大,Swoole是给高手用的,而Workerman更为高效,直接,拿来直用。其实说的也在理,两者的选择要看你的项目场景需求,就功能特性上来说,两者存在一定的差异,多出来那部分你用得到吗?
Swoole和Workerman都采用CLI模式运行,根据项目场景需求和实际体量,好好看官方文档可大大提升性能!
通信引擎在移动端常见应用场景是什么?
Push消息推送、IM聊天
原文连接
的情况下转载,若非则不得使用我方内容。