Swoole必知必会

前言

PHP这门语言从诞生到现在差不多20年了,一直是作为Web领域快速开发的首选语言。PHP是一个很简单的语言,日常场景是这样的,从数据库取出数据,对模板进行渲染并直接输出到Web浏览器。但作为一个有追求的PHP开发者,想要真正学习后端架构技术的话,Swoole可能是你不得不了解的PHP扩展。

什么是Swoole

在Swoole的官方网站是这样来定义Swoole的。

Swoole是一个使用事件驱动、异步、非阻塞IO模型的高性能网络框架,具有可扩展性和高效率。它使PHP开发人员能够用PHP编程语言编写高性能、可伸缩、并发的TCP、UDP、Unix套接字、HTTP、WebSocket服务,而不需要太多关于非阻塞I/O编程和低级Linux内核的知识。Swoole比较适合用于服务器端开发,支持类似Go语言的协程,可以使用完全同步的代码实现自动协程调度。

从上面的定义,可以看出,其实学习Swoole就是学习后端编程。我们来看下Swoole编程与传统的PHP开发有什么区别。

运行模式

作为LNMP组件中的开发语言,PHP最常见的运行模式是Fast-CGI模式。PHP-FPM是运行FastCGI协议上的进程管理器,管理的主要是PHP处理CGI协议的请求进程,带有进程池的管理以及常驻进程的服务,高效的处理请求,提升请求并发量。

Swoole是运行在PHP-CLI模式下。PHP-CLI是CGI协议的简化版本,适合开发SHELL应用,脚本开发。

网络编程

PHP最常使用的请求协议是Http+Json,用户的请求Nginx服务器,Nginx将用户的请求变量转发给Fast-CGI模块,Fast-CGI将处理完的请求结果返回给Nginx服务,Nginx收到返回后发送结果给Web浏览器。

Swoole支持的协议会比较多。其中TCP/UDP协议可以应用于游戏服务器端开发,WebSocket协议常用于实时消息推送,比如聊天室等。Http Server可以用于高性能的Web服务,API服务等。甚至还有基于Swoole的微服务框架,比如Swoft。

底层知识

PHP开发者几乎很少去关注进程/线程方面的问题,因为通常情况下,都被Nginx和PHP-FPM已经处理了。

Swoole编程,就需要关注底层的实现:

  1. 需要学习异步编程模式
  2. 什么是多进程?什么是多线程?如何实现常驻进程?
  3. 如何使用类Go语言的协程,来提高程序的性能?

为什么你应该学习Swoole

高性能

学习Swoole并不需要重新学习一门语言,之前学习到PHP基础知识,也依然有效。你可以很容易采用Swoole搭建高性能的Http服务,WebSocket服务,甚至是TCP服务。Swoole提供异步的Redis,Http,WebSocket客户端,异步任务等。

协程

Swoole最新的版本拥有高可用性的内置协程,你可以采用同步的代码实现异步的高性能。你可以将协程理解为轻量级的线程,可以非常容易地在进程中创建成千上万个协程。

后端编程

最后一个,也是我觉得重要的一个原因。Swoole可能是PHP开发者切入到后端编程最简单的方式。如果你想要实现一个常驻进程,高性能的后端服务,Swoole可能是当前PHP开发工程师唯一的选择。

从长远来看,开发语言只是程序员实现的工具而已,真正解决问题是后端架构技术。作为一个PHP业务开发工程师,所能实现的价值是有上限的。而选择后端编程,你所能达到的上限几乎是没有。 后端编程的方向有很多,比如偏底层方向的操作系统,文件系统等,偏架构方向的分布式系统架构、微服务、DevOps、Cloud Native等,还有偏数据方向的大数据、机器学习、人工智能……

最后,我总结下学习Swoole编程需要掌握的知识:

  1. Linux下进程和线程的概念,进程/线程切换是如何调度的,进程间通信的基本知识
  2. Socket编程知识,基本操作如accept/connect、send/recv等,接受/发送缓冲区,阻塞/非阻塞等概念。
  3. IO复用,如select/epoll事件循环
  4. 熟悉TCP/UDP/WebSocket等协议
  5. Linux下调试命令

总结

我从什么是Swoole,为什么你应该学习Swoole,怎么学习Swoole等这几个方面总结了自己学习Swoole的方法论。学习新的知识是为了自己能有所成长,一个合格的工程师,应该时刻保持学习的心态,勇敢的尝试新的技术。

发表评论

电子邮件地址不会被公开。 必填项已用*标注