首页 理论教育 PHP企业级应用:Work类

PHP企业级应用:Work类

时间:2023-11-21 理论教育 版权反馈
【摘要】:表7.35.listen回调函数的使用例如一个http Worker启动后实例化一个webSocket Worker,那么这个进程即能通过http协议访问,又能通过webSocket协议访问。由于webSocket Worker和http Worker在同一个进程中,所以它们可以访问共同的内存变量,共享所有Socket连接。注意:如果PHP版本<=7.0,则不支持在多个子进程中实例化相同端口的Worker。例如A进程创建了监听2016端口的Worker,那么B进程就不能再创建监听2016端口的Worker,否则会报Address already in use错误。

PHP企业级应用: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错误。例如下面的代码是无法运行的。(www.xing528.com)

如果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代码:

后端推送消息的代码:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈