php开发⾯试题---php对swoole的理解
⽬录
⼀、总结
⼀句话总结:
1、swoole出现的意义是什么?
2、swoole的本质是什么?
3、swoole⽀持哪些功能?
4、php+swoole能做什么?
⼆、php 对swoole的理解
1:关于phper常⽤的全局变量(global)为什么在onRequest函数中不能使⽤。
2:什么是异步、什么是回调
3:为什么onReceive收到的数据这么⼤
4:⾃制httpserve
使⽤swoole必须要掌握的技能
个⼈学习swoole的经历
总结
⼀、总结(点击显⽰或隐藏总结内容)
⼀句话总结:
以战养学,实例驱动
swoole是披着PHP外⾐的C程序:其实就是c、java那些语⾔⾥⾯的⾼阶功能:⽐如 持久连接、异步通信、websocket、多线程
如何搭建php开发环境1、swoole出现的意义是什么?
解決php缺失的功能:swoole做为⼀种⽹络通信框架,解决php缺失的功能:⽐如多线程、异步通信、持久连接等
2、swoole的本质是什么?
披着PHP外⾐的C程序:其实就是c、java那些语⾔⾥⾯的⾼阶功能
php所缺失的功能:swoole所提供的功能正是php所缺失的功能:⽐如多线程、异步通信、持久连接等
异步⽹络通信引擎:⾯向⽣产环境的 PHP 异步⽹络通信引擎
3、swoole⽀持哪些功能?
其实就是c、java那些语⾔⾥⾯的⾼阶功能
持久连接、异步通信、websocket、多线程
4、php+swoole能做什么?
c能做的,php+swoole都能做:⽐如 游戏服务器、系统等
本⽂主要记录⼀下学习swoole的过程、填过的坑以及swoole究竟有多么强⼤!
⾸先说⼀下对swoole的理解:披着PHP外⾐的C程序。很多PHPer朋友看到swoole提供的强⼤功能、外界对其的崇拜便跃跃欲试的安装、调 试其demo、编写新功能,然后兴奋的奔⾛相告。没过⼏天当你按照⾃⼰的理解继续⽤swoole时,发现代码并没有按照⾃⼰的预期运⾏,然后开始破⼝⼤ 骂,什么破东西呀,代码跟demo基本⼀样,为啥运⾏不通呢?什么狗屁work、task、共享内存、ipcs、异步,各种问题涌现,然后迅速去查官⽅⽂ 档,发现⽂档中竟然对这些并没有提及,只是简单的介绍怎么使⽤,此时⼏乎对swoole丧失希望。
回到顶部
1:关于phper常⽤的全局变量(global)为什么在onRequest函数中不能使⽤。
因为swoole是多线程编程,global是不能在多个进程间共享的。例如
global $i = 0;
function onRequest() {
echo $i++;
}
如果在swoole中写⼀个上⾯的程序,并不会每次访问输出⼀个递增的数字。如果要实现预期的效果,需要使⽤swoole_table的相关函数。
回到顶部
2:什么是异步、什么是回调
对于phper来说,对异步、回调的理解估计就是ajax。当看到swoole⾥⾯对异步、回调的解释,貌似很简单的样⼦,就这样在没有任何多线程编辑经验的时候贸然⽤了swoole,结果被坑的偷偷撸代码好⼏个通宵来填⾃⼰的坑。
回到顶部
3:为什么onReceive收到的数据这么⼤
客户端发送的多次请求,服务端是可以⼀次性接收的。并不是客户端发送⼀次,服务端接收⼀次
回到顶部
4:⾃制httpserve
写⼀个http服务端,然后通过浏览器访问这个⾃制的服务器,刷新⼀次浏览器,服务端为什么为接收到两次请求?这个问题估计困饶了好多初次⽤swoole写httpserver的朋友。因为浏览器会多发⼀个favicon.ico请求。
原因
出现这种情况的原因其实很简 单,⼤部分phper都只会php这⼀种语⾔,主要⽤途就是做web,写业务逻辑。很少去了解服务器程序的开发。有⼀次⼀个朋友⽤swoole写了⼀个简 单的服务端,⼀个客户端,跑过来问我为什么都启动了却都收不到数据,我简单看了下代码,所有连接确实都成功了,两端都设置了onReceive回调,代码 没问题,看到最后才发现他的服务端、客户端都设置了接到消息的回调函数,但是两端都没有向对⽅发消息,两端处于僵持状态。然后swoole官⽅对于这种常 识问题没有给出说明,只是说如何设置回调、如何发消息,如何这样,如何那样。对于有服务端开发经验的同学来说,肯定不会遇到这种问题,swoole⽂档也 不需要指明需要这样做,因为这是常识。但对于phper来说,指明这⼀点是⾮常重要的,因为如上⾯所说phper是没有这⽅⾯认知的,只有服务端开发经验 的程序员有才会有。
swoole的特⾊:
⽹络通信 框架、异步、多线程。这些特性正是php所不完善的功能(虽然官⽅提供很多基础函数可以
实现这些功能,然后缺少中⽂⽂档,很少有⼈⽤php来实现这部分功 能),普通的phper也不具备这些特性的基础认知,所以贸然使⽤swoole难免会遇到⼀些根本在swoole官⽅查不到的常识问题。
使⽤swoole必须要掌握的技能
多线程编程
进程间通信
⽹络协议TCP/UDP的认知
PHP的各项基本技能
回到顶部
个⼈学习swoole的经历
在很久之前我也是⼀个只会 php的程序员,后来⼀次偶然机会需要⽤httpsqs,⽤了⼀段时间后发现有⼀些个性的需求,于是就开始看源码。这真是不看不知道,⼀看吓⼀ 跳,httpsqs只是⼀层简单的包装,内部是⼀个Tokyo Cabinet数据库,印象中封装的代码也就⼀百多⾏。主要思路就是⽤C语⾔的libe
vent做了⼀个http服务器,接收请求读写tokyo cabinet数据库,当时按照这种思路做出来的程序确实不少。后来我就突发奇想,既然C语⾔可以⽤libevent函数,那PHP肯定也可以⽤ libevent监听⽹络,接收请求后读写数据库做队列服务。后来经过查php官⽅⽂档,PHP确实提供⼀系统完整的函数来完成这些功能,甚⾄多线程的全 套函数都有提供,但中⽂⽂档太少,⽹上也很少搜索到成熟的代码。在逼不得已的情况下,补习了linux-C多线程开发的基本原理,进程间通信的常⽤⽅法, 也⽤来做了⼀些简单的demo。唯⼀的感觉就是写⼀个简单的功能,设计起来还真复杂。就在快要放弃的时候,swoole出现了。swoole所提供的功能 正是php所缺失的功能,简直是太棒了。swoole做为⼀种⽹络通信框架,只需要简单的⼏⾏设置,⼀个服务器就搭建起来了,以后就是不断的去完善业务代 码。之前在libevent交流中得知swoole的设计在c\c++中并不是最好的框架设计,但其亮点就是把基本功能⽤C封装好,业务功能留给世界上 最好的语⾔PHP来编写。⾃此便开始了swoole的填坑之旅。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论