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聊天