workerman源码解读(上)–执行流程

本篇文章技术关键词: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

原文查看完整源代码

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181202G16BL200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券