被 swoole 坑哭的 PHP 程序员本文重要记录一下学习 swoole 的过程、填过的坑以及 swoole 究竟有多么强大!首先说一下对 swoole 的理解:披着 PHP 外衣的 C 程序。诸多 PHPer 朋友看到 swoole 提供的强大功能、外界对其的崇拜便跃跃欲试的安装、调 试其demo、编写新功能,然后兴奋的奔走相告。没过几天当你按照自己的理解继续用 swoole 时,发现代码并没有按照自己的预期运行,然后开始破口大 骂,什么破东西呀,代码跟 demo 基本同样,为啥运行不通呢?什么狗屁work、task、共享内存、ipcs、异步,多种问题涌现,然后迅速去查官方文 档,发现文档中居然对这些并没有提及,只是简单的简介怎么使用,此时几乎对 swoole 丧失但愿。遇到的几点问题:1:有关 phper 常用的全局变量(global)为何在 onRequest 函数中不能使用。由于 swoole 是多线程编程,global 是不能在多种进程间共享的。例1. global $i = 0; 2. 3. function onRequest() { 4. 5. echo $i++; 6. 7. } 假如在 swoole 中写一种上面的程序,并不会每次访问输出一种递增的数字。假如要实现预期的效果,需要使用 swoole_table 的有关函数。2:什么是异步、什么是回高对于 phper 来说,对异步、回调的理解估计就是 ajax。当看到 swoole 里面对异步、回调的解释,貌似很简单的样子,就这样在没有任何多线程编辑经验的时候贸然用了 swoole,成果被坑的偷偷撸代码好几种彻夜来填自己的坑。3:为何 onReceive 收到的数据这样大客户端发送的多次祈求,服务端是可以一次性接受的。并不是客户端发送一次,服务端接受一次4:自制 httpserve写一种 http 服务端,然后通过浏览器访问这个自制的服务器,刷新一次浏览器,服务端为何为接受到两次祈求?这个问题估计困饶了好多初次用 swoole 写httpserver 的朋友。由于浏览器会多发一种 favicon.ico 祈求。原因出现这种状况的原因其实很简 单,大部分 phper 都只会 php 这一种语言,重要用途就是做 web,写业务逻辑。很少去理解服务器程序的开发。有一次一种朋友用 swoole 写了一种简 单的服务端,一种客户端,跑过来问我为何都启动了却都收不到数据,我简单看了下代码,所有连接确实都成功了,两端都设置了 onReceive 回调,代码 没问题,看到最终才发现他的服务端、客户端都设置了接到消息的回调函数,不过两端都没有向对方发消息,两端处在僵持状态。然后 swoole...