Workman手册笔记一

安装workerman参考:http://www.workerman.net/install

下载workerman扩展包git clone https://github.com/walkor/Workerman

手册参考: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异步连接失败时 (code:WORKERMAN_CONNECT_FAIL msg:stream_socket_client返回的错误消息)

四、接口

名称

参数

返回值

说明

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客户端完成向客户端推送数据类似的效果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

【热点】爬了3000万QQ用户数据,挖出了花千骨赵丽颖的QQ号

文|.NET程序猿小伍 两周前,做的一个项目需要模拟一批用户评价数据,如果想让数据看着真实点,那就得使用随机的用户昵称和头像啊。要是头像或者昵称全都差不多,那别...

40870
来自专栏王磊的博客

net发布的dll方法和类显示注释信息(字段说明信息)[图解]

    自己发布的dll添加的另一个项目中突然没有字段说明信息了,给使用带来了很多的不便,原因是为了跨项目引用,所以导致不显示注释信息的,一下是解决这个问题的方...

33950
来自专栏机器人网

图像识别:微信跳一跳机器人

准备 IDE:VisualStudio Language:VB.NET/C# GitHub:AutoJump.NET 本文将向你介绍一种通过图像识别实现“跳一跳...

44850
来自专栏SeanCheney的专栏

Python模拟登陆 —— 征服验证码 7 京东

登录界面 京东的登录表单设置了许多隐藏字段,如下所示: 隐藏字段 所以都要获取下来。 同样也是输错三次之后出现authcode。 验证码 import requ...

447110
来自专栏散尽浮华

一次系统重启后域名地址修改引起的"血案"(Tomcat报错:java.net.UnknownHostException)

事故描述:公司的一个内部业务系统由于程序bug,导致系统崩溃,需要强制重启服务器。系统重启后,赶紧将业务程序启动。随后发现/etc/resolv.conf文件的...

48170
来自专栏wannshan(javaer,RPC)

ReentrantLock 重入锁,重入体会有多深?

以前写过这个 https://my.oschina.net/u/146130/blog/843445 今天看CyclicBarrier源码,核心代码 这一串 /...

35550
来自专栏PPV课数据科学社区

吴甘沙:既然不能避免个人数据泄漏,何不做自己数据的CEO呢?|高峰论坛

本文由未来创客(futuretrek)根据峰会内容整理,未经授权禁止转载 6月18日下午,湛庐文化·未来创客在清华大学学经管学院伟伦楼一层报告厅,举办了题为“数...

41360
来自专栏PPV课数据科学社区

一文读懂如何用 Python 实现6种排序算法

原文链接:https://my.oschina.net/liuyuantao/blog/749329 总结了一下常见集中排序的算法 ? 归并排序 归并排序也称合...

39970
来自专栏从零开始的linux

安装php7

下载php7 wget http://cn.php.net/distributions/php-7.0.27.tar.gz 安装依赖 yum -y instal...

41850
来自专栏JAVA高级架构

JVM并不是那么重量级

译者注:很多人误认为JVM是一个很重量级的框架,本文作者之前也是这么认为的,但是在这篇文章中,作者从几个层面分析了一下,可以看出JVM并不是我们想象中的那么“重...

29450

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励