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编程,就需要关注底层的实现:
- 需要学习异步编程模式
- 什么是多进程?什么是多线程?如何实现常驻进程?
- 如何使用类Go语言的协程,来提高程序的性能?
为什么你应该学习Swoole
高性能
学习Swoole并不需要重新学习一门语言,之前学习到PHP基础知识,也依然有效。你可以很容易采用Swoole搭建高性能的Http服务,WebSocket服务,甚至是TCP服务。Swoole提供异步的Redis,Http,WebSocket客户端,异步任务等。
协程
Swoole最新的版本拥有高可用性的内置协程,你可以采用同步的代码实现异步的高性能。你可以将协程理解为轻量级的线程,可以非常容易地在进程中创建成千上万个协程。
后端编程
最后一个,也是我觉得重要的一个原因。Swoole可能是PHP开发者切入到后端编程最简单的方式。如果你想要实现一个常驻进程,高性能的后端服务,Swoole可能是当前PHP开发工程师唯一的选择。
从长远来看,开发语言只是程序员实现的工具而已,真正解决问题是后端架构技术。作为一个PHP业务开发工程师,所能实现的价值是有上限的。而选择后端编程,你所能达到的上限几乎是没有。 后端编程的方向有很多,比如偏底层方向的操作系统,文件系统等,偏架构方向的分布式系统架构、微服务、DevOps、Cloud Native等,还有偏数据方向的大数据、机器学习、人工智能……
最后,我总结下学习Swoole编程需要掌握的知识:
- Linux下进程和线程的概念,进程/线程切换是如何调度的,进程间通信的基本知识
- Socket编程知识,基本操作如accept/connect、send/recv等,接受/发送缓冲区,阻塞/非阻塞等概念。
- IO复用,如select/epoll事件循环
- 熟悉TCP/UDP/WebSocket等协议
- Linux下调试命令
总结
我从什么是Swoole,为什么你应该学习Swoole,怎么学习Swoole等这几个方面总结了自己学习Swoole的方法论。学习新的知识是为了自己能有所成长,一个合格的工程师,应该时刻保持学习的心态,勇敢的尝试新的技术。
始发于我的博客:神秘极客 原始链接: https://xbc.me/swoole/ Power By SteemPress
Congratulations @geekwho! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
@geekwho 你好,欢迎来到精彩的Steem世界~~~ 🙂
Steem和其他社区有很多不同,新人在早期经常会面临各种困难,例如:
为了解决这些问题,我们建议:
最后,再次欢迎你来到Steem中文社区大家庭🎉 ,祝你在Steem的旅程愉快!!!
有任何问题,可以咨询 @team-cn 或 @cn-hello