下载

手册参考:http://doc3.workerman.net/

一、WorkerMan代码规范

1、  类采用首字母大写的驼峰式命名,类文件名称必须与文件内部类名相同,以便自动加载。

2、  使用命名空间,命名空间名字与目录路径对应,并以开发者的项目根目录为基准

3、  普通函数及变量名采用小写加下划线方式

4、  类成员及类的方法采用首字母小写的驼峰形式

5、  函数及类的参数采用小写加下划线方式

二、Worker类属性说明

名称

类型

说明

$id

Int

当前worker进程的id编号,范围为0到$worker->count-1

$count

Int

设置当前Worker实例启动多少个进程,不设置时默认为1

$name

String

设置当前Worker实例的名称,方便运行status命令时识别进程。不设置时默认为none

$user

String

设置当前Worker实例以哪个用户运行。此属性只有当前用户为root时才能生效。不设置时默认以当前用户运行

$reloadable

Bool

设置当前Worker实例是否可以reload,即收到reload信号后是否退出重启。不设置默认为true,收到reload信号后自动重启进程

$transport

String

设置当前Worker实例所使用的传输层协议,目前只支持两种,tcp和udp。不设置默认为tcp

$connections

Array

此属性中存储了当前进程的所有的客户端连接

$daemonize

Static Bool

此属性为全局静态属性,表示是否以daemon(守护进程)方式运行。如果启动命令使用了 -d参数,则该属性会自动设置为true。也可以代码中手动设置

$stdoutFile

Static String

此属性为全局静态属性,如果以守护进程方式(-d启动)运行,则所有向终端的输出(echo var_dump等)都会被重定向到stdoutFile指定的文件中。

如果不设置,并且是以守护进程方式运行,则所有终端输出全部重定向到/dev/null

$pidFile

Static String

如果无特殊需要,建议不要设置此属性

此属性为全局静态属性,用来设置WorkerMan进程的pid文件路径。

此项设置在监控中比较有用,例如将WorkerMan的pid文件放入固定的目录中,可以方便一些监控软件读取pid文件,从而监控WorkerMan进程状态。

$logFile

Static String

用来指定workerman日志文件位置。

此文件记录了workerman自身相关的日志,包括启动、停止等。

如果没有设置,文件名默认为workerman.log,文件位置位于Workerman的上一级目录中。

备注:只记录workman自身相关日志

$globalEvent

Static Event

此属性为全局静态属性,为全局的eventloop实例,可以向其注册文件描述符的读写事件或者信号事件

$reusePort

Bool

设置当前worker是否开启监听端口复用(socket的SO_REUSEPORT选项),默认为false,不开启。

开启监听端口复用后允许多个无亲缘关系的进程监听相同的端口,并且由系统内核做负载均衡,决定将socket连接交给哪个进程处理,避免了惊群效应,可以提升多进程短连接应用的性能。

注意:此特性需要PHP版本>=7.0

$protocol

String

设置当前Worker实例的协议类。

注:协议处理类可以直接在初始化Worker在监听参数时直接指定

三、回调属性

名称

参数

说明

callback Worker::$onWorkerStart

$worker

设置Worker启动时的回调函数,即当Worker启动后立即执行Worker::onWorkerStart成员指定的回调函数

callback Worker::$onWorkerReload

$worker

设置Worker收到reload信号后执行的回调。

可以利用onWorkerReload回调做很多事情,例如在不需要重启进程的情况下重新加载业务配置文件

注意:

子进程收到reload信号默认的动作是退出重启,以便新进程重新加载业务代码完成代码更新。所以reload后子进程在执行完onWorkerReload回调后便立刻退出是正常现象。

如果在收到reload信号后只想让子进程执行onWorkerReload,不想退出,可以在初始化Worker实例时设置对应的Worker实例的reloadable属性为false

callback Worker::$onWorkerStop

$worker

设置Workert停止时的回调函数,即当Worker收到stop信号后执行Worker::onWorkerStop指定的回调函数

callback Worker::$onConnect

$connection

当有客户端连接时触发的回调函数

callback Worker::$onMessage

$connection

$data 客户端发送的数据

当有客户端的连接上有数据发来时触发

callback Worker::$onClose

$connection

当客户端的连接断开时触发,不管连接是如何断开的,只要断开就会触发

callback Worker::$onBufferFull

$connection

每个连接都有一个单独的应用层发送缓冲区,缓冲区大小由TcpConnection::$maxSendBufferSize决定,默认值为1MB,可以手动设置更改大小,更改后会对所有连接生效。

更多:http://doc3.workerman.net/worker-development/on-buffer-full.html

callback Worker::$onBufferDrain

$connection

每个连接都有一个单独的应用层发送缓冲区,缓冲区大小由TcpConnection::$maxSendBufferSize决定,默认值为1MB,可以手动设置更改大小,更改后会对所有连接生效。

该回调在应用层发送缓冲区数据全部发送完毕后触发。一般与onBufferFull配合使用,例如在onBufferFull时停止向对端继续send数据,在onBufferDrain恢复写入数据。

callback Worker::$onError

$connection

$code

$msg

当客户端的连接上发生错误时触发。

目前错误类型有

1、调用Connection::send由于客户端连接断开导致的失败 (code:WORKERMAN_SEND_FAIL msg:client closed)

2、在触发onBufferFull后,仍然调用Connection::send,并且发送缓冲区仍然是满的状态,导致发送失败 (code:WORKERMAN_SEND_FAIL msg:send buffer full and drop package)

3、使用AsyncTcpConnection

四、接口

名称

参数

返回值

说明

void Worker::runAll(void)

运行所有worker实例

void Worker::stopAll(void)

停止当前进程(子进程)的所有Worker实例并退出。

此方法用于安全退出当前子进程,作用相当于调用exit/die退出当前子进程。

与直接调用exit/die区别是,直接调用exit或者die无法触发onWorkerStop回调,并且会导致一条WORKER EXIT UNEXPECTED错误日志。

void Worker::listen(void)

用于实例化Worker后执行监听。

此方法主要用于在Worker进程启动后动态创建新的Worker实例,能够实现同一个进程监听多个端口,支持多种协议。

例如一个http Worker启动后实例化一个websocket Worker,那么这个进程即能通过http协议访问,又能通过websocket协议访问。由于websocket Worker和http Worker在同一个进程中,所以它们可以访问共同的内存变量,共享所有socket连接。可以做到接收http请求,然后操作websocket客户端完成向客户端推送数据类似的效果。

workman 日志_workerman相关推荐

  1. workman php教程_workerman搭建websocket入门教程,简单实用

    在物联网控制远程硬件的过程中,实时通信是必不可少的.不用实时通信可不可以呢?当然是可以的,但在实际应用中的体验可能就十分的不好了. 试想一下,一个联网电灯,控制端命令发出去,电灯要2到3秒钟以后才能开 ...

  2. workman的学习总结

    我们知道php主要是用来做web应用的,而且平时使用的都是都是和其他的web服务器来结合使用,比如和apache,nginx和apache的时候,是作为apache的一个动态模块来加载,和nginx的 ...

  3. python的日志库logging,真香!!!

    学习资源 Python之日志处理(logging模块) python之配置日志的几种方式 logging 官方高级用法 使用方法 LOG_FORMAT = "%(asctime)-15s - ...

  4. Docker学习(五)-----Docker查看日志

    八.Docker查看日志 docker logs 容器名称/ID docker logs -f -t --since="2018-12-1" --tail=10 qfjy_exam ...

  5. Springboot 利用AOP编程实现切面日志

    前言 踏入Springboot这个坑,你就别想再跳出来.这个自动配置确实是非常地舒服,帮助我们减少了很多的工作.使得编写业务代码的时间占比相对更大.那么这里就讲一下面向切面的日志收集.笔者使用lomb ...

  6. 【Springboot】日志

    springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层):                JCL(Jakarta Commons Logging)                ...

  7. log4j屏蔽掉某个包下的log日志打印

    在log4j的配置文件下配置 ## Disable other log log4j.logger.com.summaryday.framework.db=OFF log4j定义了8个级别的log(除去 ...

  8. SpringBoot集成AOP管理日志

    写在前面 如何将所有的通过url的请求参数以及返回结果都输出到日志中? 如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择.使用Spring的AOP功能即可完成. AOP ...

  9. 日志处理logger

    20220127 https://mp.weixin.qq.com/s/CgmfVqogqKBzezmIR7ZfsQ https://blog.csdn.net/kyle1314608/article ...

最新文章

  1. Vue 监听路由变化的三种方式
  2. 如何解决:Mac提示“XXXXX”已损坏,打不开。 您应该将它移到废纸篓。
  3. 新概念英语(1-137)A pleasant dream
  4. 软件缘-网友个人精心打造的精品软件收集
  5. 从零入门 Serverless | 函数计算的可观测性
  6. ExtAspNet v3.1.1
  7. [社会趣闻]储户召集7名亲友占满银行窗口 每次存一元
  8. Hibernate 发展之路
  9. qlistview 自定义控件_是否可以在QListView中添加自定义窗口小部件?
  10. 墨天轮章芋文:用十年打造中国的数据库生态体系
  11. TensorFlow 下 mnist 数据集的操作及可视化
  12. DEFCON China倒计时 没想到炸屏“玩坏”百度
  13. 算法怎么就这么难?----使用欧几里得算法求两数的最大公约数
  14. linux鼠标手势,Vivaldi 1.2 发布,定制鼠标手势
  15. 如何在没有安装安卓环境的mac os上装adb环境.
  16. mysql 脏页刷新_InnoDB脏页刷新机制
  17. curl设置代理访问的方法
  18. leetcode 1534. Count Good Triplets(python)
  19. 用C++写出求矩形和圆形面积的程序
  20. 施工企业数字化转型的成功的关键要素:数据、算力、算法

热门文章

  1. 2012服务器系统显示这台电脑,两台windows server 2012 R2 服务器 故障:计算机已经从检测错误后重新启动。请问如何解决?...
  2. Matlab中隐函数绘制方法
  3. SharePoint debug - Unable to render the data. If the problem persists, contact your web server admin
  4. 企业级机械硬盘和消费级机械硬盘有什么区别?
  5. 国产ETL工具/ETL 产品 (BeeDI ) 集团财务 双向同步 审核平台
  6. 前端效果之“拉开窗帘”
  7. 阿里云返回的视频截图问题
  8. self的用法与意义(一)
  9. 伪元素学习包含::before、::after的用法
  10. 如何入职阿里前端岗?