workman学习

Nov 15, 2018


worker说明

Worker是WorkerMan中最基本容器,Worker可以开启多个进程监听端口并使用特定协议通讯,类似nginx监听某个端口。每个Worker进程独立运作,采用Epoll(需要装event扩展)+非阻塞IO,每个Worker进程都能上万的客户端连接,并处理这些连接上发来的数据。主进程为了保持稳定性,只负责监控子进程,不负责接收数据也不做任何业务逻辑。

客户端与worker进程的关系

worker

主进程与worker子进程关系

worker-relation

目录结构

Workerman                      // workerman内核代码
    ├── Connection                 // socket连接相关
    │   ├── ConnectionInterface.php// socket连接接口
    │   ├── TcpConnection.php      // Tcp连接类
    │   ├── AsyncTcpConnection.php // 异步Tcp连接类
    │   └── UdpConnection.php      // Udp连接类
    ├── Events                     // 网络事件库
    │   ├── EventInterface.php     // 网络事件库接口
    │   ├── Libevent.php           // Libevent网络事件库
    │   ├── Ev.php                 // Libev网络事件库
    │   └── Select.php             // Select网络事件库
    ├── Lib                        // 常用的类库
    │   ├── Constants.php          // 常量定义
    │   └── Timer.php              // 定时器
    ├── Protocols                  // 协议相关
    │   ├── ProtocolInterface.php  // 协议接口类
    │   ├── Http                   // http协议相关
    │   │   └── mime.types         // mime类型
    │   ├── Http.php               // http协议实现
    │   ├── Text.php               // Text协议实现
    │   ├── Frame.php              // Frame协议实现
    │   └── Websocket.php          // websocket协议的实现
    ├── Worker.php                 // Worker
    ├── WebServer.php              // WebServer
    └── Autoloader.php             // 自动加载类

启动与停止

以debug(调试)方式启动

php start.php start

以daemon(守护进程)方式启动

php start.php start -d

停止

php start.php stop

重启

php start.php restart

平滑重启

php start.php reload

查看状态

php start.php status

查看连接状态(需要Workerman版本>=3.5.0)

php start.php connections

debug和daemon方式区别

1、以debug方式启动,代码中echo、var_dump、print等打印函数会直接输出在终端。

2、以daemon方式启动,代码中echo、var_dump、print等打印会默认重定向到/dev/null文件,可以通过设置Worker::$stdoutFile = ‘/your/path/file’;来设置这个文件路径。

3、以debug方式启动,终端关闭后workerman会随之关闭并退出。

4、以daemon方式启动,终端关闭后workerman继续后台正常运行。

有兴趣的可以直接看官方手册workman