【Swoole系列1】在Swoole的世界中,你将学习到什么?

在Swoole的世界中,你将学习到什么?

在接下来的学习中,我们将要接触到的,将是 PHP 扩展中非常出名的一个高大上的框架,那就是 Swoole 。或许你已经在生产环境中使用过了,或许你只是看过官方文档写过几个例子,当然,更有可能你只是听过它的名字。

不用太担心,通过我们的学习,你将会掌握到基本的 Swoole 开发知识,一些计算机操作系统以及网络的简单知识,以及一个非常类似于 Laravel 的 Swoole 框架。相信通过这些,你就可以尝试在自己的真实项目中使用 Swoole 来做一些项目,体验 PHP 最为人诟病的效率问题的超强解决方案。

Swoole

我们先来看看 Swoole 是什么。

Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。

上面这段是官方网站首页上对于 Swoole 的说明。看着就感觉高大上吧?其实,TCP、UDP、Unix Socket、HTTP、 WebSocket 这些,我们普通 PHP 也能做到,但是,通常我们在进行普通的 Web 开发时,都会借助一个服务器应用,比如说 Apache 或者 Nginx 来配合 fastcgi 进行实现。而在 Swoole 中,只需要运行起 Swoole 服务就可以实现这些服务的挂载了。当然,我们还可以在外面套上 Nginx ,这样可以更方便地管理应用地址(域名)。

此外,在官方描述中,高性能是一个关键词,究竟性能能提升到什么程度呢?我们后面将会有例子演示。

和传统 PHP 概念上的不同

即使你没有做过 Java 或者 .NET、C/C++ 之类的开发,应该也多少听说过它们是需要编译之后生成一个运行文件后才能正式部署上线的。而我们传统的 PHP 貌似并没有这种情况,随时更新一个文件,丢到服务器上就可以运行。这个问题就要说到静态和动态语言的问题了。

一般情况下,Java 这类的语言可以归结为静态语言,它们有固定的变量类型,必须编译后才能运行,特点是一次加载会直接将代码加载到内存中。典型的就像是我们电脑上的各种应用程序,直接执行一个程序的 .exe 文件,这个程序就在你的电脑上运行起来了。如果你用文本工具打开这种 exe 或者 Java 的 Jar 文件的话,看到的将是一堆乱码似的二进制内容。

而 PHP 这一类的,则可以归为动态语言,特点是变量不用指定类型,随便一个文件就可以直接运行。相信你一定想到了,Python、JavaScript 都是这样的运行方式。即使 JS 的 npm 编译,实际上也只是对代码进行了混淆和格式化,并没有完全编译成一个类似于 jar 包那样的中间代码执行文件。

对于这两种语言编译运行方式来说,静态语言将代码一次加载到内存,效率明显会提升不少,毕竟内存和硬盘的速度差距还是蛮大的。而且,静态语言会一次性将很多初始对象,类模板文件加载,调用的时候不用重新再加载实例化,性能就会有更进一步的上升空间。但是,静态语言通常都是需要编译成一个可执行的中间文件的,如果有代码的更新,则必须重启整个程序。

好吧,动态语言的优缺点很明显就和静态语言是反过来的了。动态语言每一次运行一个脚本,就需要将所有相关的文件全部加载一次,而且如果没别的优化的话(比如 OPcache),所有的相关文件都要从硬盘读取、加载内存、实例化这些步骤中从头走一遍。可想而知,他的效率和性能是完全无法与静态语言相比的。但是,优点也很明确,随时修改一个文件就可以随时上线,线上业务不用中断。

因此,PHP 通常会是创业公司的首选,因为它方便,更新迭代速度快,对线上业务影响小。但当公司发展到一定规模之后,却会因为效率性能的问题而容易被 Java、Golang 等语言代替。毕竟,一台服务器能够抗 5 台服务器的压力,成本还是能节省不少的,更主要的是,公司到一定规模之后,对于热更新、规范化上线等等相关的操作,也会让静态语言需要编译或重启服务这类问题成为边缘化的小问题。性能效率往往才是中大型公司更重要的考虑。

上述内容只是基于我自己的理解,不代表完全正确,但是大方向应该是没有问题的。想必说到这里,你也能猜到 Swoole 是如何来解决效率性能问题的。它就是通过直接将代码加载到内存的方式,就像 Java 他们一样来启动一个进程,实现 PHP 代码的高性能执行。同时,尽量保持代码还是可以按照传统的方式来写,为我们 PHP 程序员提供了一个高性能的解决方案。

教程框架

这一次的系列教程同样是文章和视频形式,我们会分两个大的模块。

第一个模块是以官方文档为基础,简单地学习了解 Swoole 框架中的各项内容,同时尽已所能的解释一些相关的计算机和网络知识。

第二个模块就是一个我使用在生产环境中的 Swoole 框架 Hyperf 的相关配置使用。这个框架与 Laravel 非常类似,很好入手。如果你已经追过之前我们的 Laravel 系列,那么应该不会有太大难度。

同样的,不会有太多的项目实战,毕竟这些东西讲得实在是太多了,随便一搜一大把。

参考资料同样是以 Swoole 官方文档以及 Hyperf 官方文档为基础。官方文档永远是你学习的最重要参考资料,没有之一,包括我写的也只是对官方文档的扩展。

最后,还有说明一下的是,Swoole 是我们国人开发的:韩天峰 大佬。文档全中文无压力,同样地,Hyperf 也是我们国人大佬开发的,一样的纯中文文档。感谢各位大佬们!

总结

好了,剩下的不多说了,让我们赶紧进入到 Swoole 的世界吧。

ps. 因个人水平有限,在本系列文章教程中,如有错误欢迎批评指正!