7.10.1 Work类

7.10.1 Work类

1.构造函数__construct

Worker::__construct([string $listen ,array $context])

初始化一个Worker容器实例,可以设置容器的一些属性和回调接口,完成特定功能。

2.常用属性

常用属性见表7.1。

表7.1

3.回调属性

回调属性见表7.2。

表7.2

4.接口

接口见表7.3。

表7.3

5.listen回调函数的使用

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

注意:如果PHP版本<=7.0,则不支持在多个子进程中实例化相同端口的Worker。例如A进程创建了监听2016端口的Worker,那么B进程就不能再创建监听2016端口的Worker,否则会报Address already in use错误。例如下面的代码是无法运行的。

如果PHP版本>=7.0,可以设置Worker->reusePort=true,这样可以做到多个子进程创建相同端口的Worker。见下面的例子:

6.示例:php后端及时推送消息给客户端

原理:

(1)建立一个webSocket Worker,用来维持客户端长连接;

(2)webSocket Worker内部建立一个text Worker;

(3)webSocket Worker与text Worker是同一个进程,可以方便地共享客户端连接;

(4)某个独立的php后台系统通过text协议与text Worker通信;

(5)text Worker操作webSocket连接完成数据推送。

代码及步骤:

push.php

启动后端服务php push.php start-d

前端接收推送的js代码:

后端推送消息的代码: