Swoole必知必会

in #cn5 years ago

前言

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的方法论。学习新的知识是为了自己能有所成长,一个合格的工程师,应该时刻保持学习的心态,勇敢的尝试新的技术。


始发于我的博客:神秘极客 原始链接: https://xbc.me/swoole/ Power By SteemPress

Sort:  

Congratulations @geekwho! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published more than 10 posts. Your next target is to reach 20 posts.

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和其他社区有很多不同,新人在早期经常会面临各种困难,例如:

  1. 在Steem上活动是需要能量的,而新人能量很少,发了一段时间帖子没能量了就无法继续发帖。点击此处查看Resource Credits(活动能量):你目前总共还能发表 1 篇文章或者回帖,每天恢复的20%能量可支持发表 1.0 篇文章或者回帖,请控制好发帖节奏;
  2. Steem非常注重版权和原创。很多新人刚加入时从其他网站转载别人的文章发表,马上就会被警告、惩罚甚至加入黑名单
  3. Steem的规则和玩法很丰富、但也比较复杂,新人经常有很多疑问希望解答、有很多知识需要学习;
  4. Steem是个社交平台,初期没有朋友和团队支持,举目无亲、无人搭理,很难生存;
  5. Steem是个应用平台,不仅仅是写作,内涵多姿多彩,如绘画、摄影、游戏、编程等等,但找到自己的定位和方向需要一些时间探索。

为了解决这些问题,我们建议:

  1. 加入新手村 @team-cn 参与各种活动与交流,和众多的多才多艺的小伙伴们一起玩耍,加入微信群便于提问和互动。想要加入新手村,可以在 @team-cn 的帖子下留言,或者联系村长 @ericet(微信账号:ericet);
  2. 阅读简明的新手攻略,了解新手的基本玩法;如有时间,可以进一步阅读Steem中文社区联合创作的《Steem指南》 (PDF版 / EPUB版) ,关注 @steem-guides 《Steem指南》,详细了解Steem中的规则、攻略、社交和人物。

最后,再次欢迎你来到Steem中文社区大家庭🎉 ,祝你在Steem的旅程愉快!!!

有任何问题,可以咨询 @team-cn@cn-hello