本篇文章技术关键词:PHP多进程,PHP原生网络函数,PHP事件驱动编程,PHP信号处理,PHP进程脱离中断成为守护进程,单进程监听多个端口,多进程监听同一端口。
本篇的流程是顺着workerman的代码执行流程走一遍,知道其是怎么运行的,其他一些疑难问题留在下一篇文章中讨论。
在码农界,PHP给大家的印象一直就是渲染网站的一门语言,操作socket,做网络方面的编程不是很在行,但一位大牛利用PHP的操作网络的函数封装出Workerman框架,它给PHP程序员编写网络代码极大的方便。它是一款高性能异步PHP socket即时通讯框架,在不安装其他扩展的情况下很方便的操作socket,编写TCP,UDP等程序。
Workerman官网有作者自己录的讲解核心原理的视频,但是观看需要498,我最近利用空闲时间研究了下框架的执行流程,写下来一起讨论下,如果对你有所帮助,那可能你就赚了498。哈哈。
我分析的Workerman代码版本是3.5.11,下载地址:https://github.com/walkor/Workerman/releases/tag/v3.5.11
1、官网实例:
这是一个简单的使用websocket协议的例子,收到消息,前面加上hello,把信息返回。
上面代码命名为ws_test.php,在cli(命令行)模式下使用 php ws_test.php start后,程序启动,我们也顺着看程序是怎样执行的。
2、首先命名空间,载入Autoloader文件,文件代码如下:
这段代码的作用主要是当代码中new的类不存在时,php会执行spl_autoload_register传入的函数,此函数去引入类文件,在new就可以执行了,composer引入包也是这个原理。
3、官网代码中下一步是
$ws_worker=newWorker("websocket://0.0.0.0:2000");
new了worker类,这个类是workerman的关键,我们来看下worker类的__construct函数
执行完__construct后继续向下执行(段1代码)
设置worker属性count,设置了一个回调函数。
4、最后执行了静态方法runAll()。这个方法是运行起workerman的地方,来看一下
这么多静态方法运行起来后程序就启动了。下面我们一个一个拆开看。
5、checkSapiEnv() 判断系统是不是cli(命令行模式)判断系统是否为Windows
原文查看完整源代码
领取专属 10元无门槛券
私享最新 技术干货