IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> swoole入门基础知识精讲之server属性方法回调函数(三) -> 正文阅读

[PHP知识库]swoole入门基础知识精讲之server属性方法回调函数(三)

本文章对应的视频课程:swoole从入门到精通(第一季)-学习视频教程-腾讯课堂

欢迎加入swoole/workerman技术交流群:604438441

Server 属性

$setting

set()函数所设置的参数会保存到Server->$setting属性上

$master_pid

返回当前服务器主进程的PID。

$manager_pid

返回当前服务器管理进程的PID。

$worker_id

得到当前Worker进程的编号,包括Task进程。

$worker_pid

得到当前Worker进程的操作系统进程ID。与posix_getpid()的返回值相同

$connections

TCP连接迭代器,可以使用foreach遍历服务器当前所有的连接,此属性的功能与Server->getClientList是一致的,但是更加友好。遍历的元素为单个连接的fd。

$taskworker

布尔类型

true表示当前的进程是Task工作进程

false表示当前的进程是Worker进程

$ports

Server on

on(string $event, mixed $callback);

第1个参数是回调的名称, 大小写不敏感

第2个函数是回调的PHP函数

Server 回调函数 4种写法

第一种 匿名函数

$a = 'lampol';

$server->on(‘start’,function($serv) use($a){ //use向匿名函数传递参数

echo 'hello....'.$a;

});

第二种 函数

$server->on('start','test_start');

function test_start($serv){

echo 'master_pid......========'.$serv->master_pid;

}

第三种 对象方法

$test = new Test();

$server->on('start',[$test,'test_start']);

class Test{

public function test_start($serv){

echo 'master_pid......========'.$serv->master_pid;

}

}

第四种 类静态方法

$server->on('start','Test::test_start');

class Test{

public static function test_start($serv){

echo 'master_pid......========'.$serv->master_pid;

}

}

Server 回调函数

onStart(Server $server);

启动后在主进程(master)的主线程回调此函数

onStart回调中,仅允许echo、打印Log、修改进程名称。不得执行其他操作。

BASE模式下没有master进程,因此不存在onStart事件。

onStart回调中,仅允许echo、打印Log、修改进程名称。不得执行其他操作。onWorkerStart和onStart回调是在不同进程中并行执行的,不存在先后顺序。

onWorkerStart(swoole_server $server, int $worker_id);

此事件在Worker进程/Task进程启动时发生。这里创建的对象可以在进程生命周期内使用

onManagerStart(swoole_server $serv);

当管理进程启动时调用它 在这个回调函数中可以修改管理进程的名称。

swoole_set_process_name 用于设置进程的名称

在onManagerStart修改为manager进程名称

onStart调用时修改为主进程名称

onWorkerStart修改为worker进程名称

onWorkerError(swoole_server $serv, int $worker_id, int $worker_pid, int $exit_code, int $signal);

$worker_id 是异常进程的编号

$worker_pid 是异常进程的ID

$exit_code 退出的状态码,范围是 0~255

$signal 进程退出的信号

kill -9 进程号 强制结束

当Worker/Task进程发生异常后会在Manager进程内回调此函数。此函数主要用于报警和监控

onWorkerStop(Swoole\Server $server, int $worker_id);

kill 进程号/正常 触发max_req

此事件在Worker进程终止时发生。在此函数中可以回收Worker进程申请的各类资源

onConnect(swoole_server $server, int $fd, int $reactorId);

有新的连接进入时,在worker进程中回调

$server是Swoole\Server对象

$fd是连接的文件描述符,发送数据/关闭连接时需要此参数

$reactorId来自哪个Reactor线程

onReceive(swoole_server $server, int $fd, int $reactor_id, string $data);

接收到数据时回调此函数,发生在worker进程中

$server,Server对象

$fd,TCP客户端连接的唯一标识符

$reactor_id,TCP连接所在的Reactor线程ID

$data,收到的数据内容,可能是文本或者二进制内容

onClose(swoole_server $server, int $fd, int $reactorId);

TCP客户端连接关闭后,在worker进程中回调此函数

无论由客户端发起close还是服务器端主动调用$serv->close()关闭连接,都会触发此事件

Server 异步任务投递

onTask(swoole_server $serv, int $task_id, int $src_worker_id, mixed $data);

在task_worker进程内被调用。worker进程可以使用swoole_server_task函数向task_worker进程投递新的任务

onFinish(swoole_server $serv, int $task_id, string $data)

当worker进程投递的任务在task_worker中完成时,task进程会通过swoole_server->finish()方法将任务处理的结果发送给worker进程。

task(mixed $data, int $task_worker_id = -1,)

投递一个异步任务到task_worker池中。此函数是非阻塞的,执行完毕会立即返回。必须先设置 task_worker_num,

并且必须设置Server的onTask和onFinish事件回调函数。

1.8.6版本增加了第三个参数,可以直接设置onFinish函数,如果任务设置了回调函数,Task返回结果时会直接执行指定的回调函数,不再执行Server的onFinish回调

$data要投递的任务数据,必须是可序列化的PHP变量

$dst_worker_id可以制定要给投递给哪个Task进程

task模块用来做一些异步的慢速任务,比如webim中发广播,发送邮件等。

onShutdown

onWorkerExit

onPacket udp 接受数据 tcp receive

onPipeMessage

onManagerStop

Server 方法

set(array $setting);

用于设置运行时的各项参数。服务器启动后通过$serv->setting来访问Server->set方法设置的参数数组。

on(string $event, mixed $callback);

第1个参数是回调的名称, 大小写不敏感

第2个函数是回调的PHP函数

start()

启动服务器,监听所有TCP/UDP端口,函数原型:

send(mixed $fd, string $data, int $serverSocket = -1)

向客户端发送数据,发送过程是异步的,底层会自动监听可写,将数据逐步发送给客户端

sendfile(int $fd, string $filename, int $offset =0, int $length = 0);

发送文件到TCP客户端连接。

sendto

向任意的客户端IP:PORT发送UDP数据包。

sendwait

同步地向客户端发送数据。sendwait目前仅可用于SWOOLE_BASE模式

exist(int $fd)

检测fd对应的连接是否存在。

sendMessage(mixed $message, int $dst_worker_id);

此函数可以向任意Worker进程或者Task进程发送消息。在非主进程和管理进程中可调用。收到消息的进程会触发onPipeMessage事件。

getClientInfo(int $fd, int $extraData, bool $ignoreError = false)

获取连接的信息,别名是Server->connection_info

getClientList

用来遍历当前Server所有的客户端连接

bind(int $fd, int $uid)

将连接绑定一个用户定义的UID,可以使用$serv->getClientInfo($fd) 查看连接所绑定UID的值

reload(bool $only_reload_taskworkrer = false)

重启所有Worker/Task进程。

stop(int $worker_id = -1, bool $waitEvent = false);

使当前Worker进程停止运行,并立即触发onWorkerStop回调函数。

close(int $fd, bool $reset = false);

关闭客户端连接

task(mixed $data, int $dst_worker_id = -1)

投递一个异步任务到task_worker池中。此函数是非阻塞的,执行完毕会立即返回。Worker进程可以继续处理新的请求。使用Task功能,必须先设置 task_worker_num,并且必须设置Server的onTask和onFinish事件回调函数。

finish(mixed $response);

此函数用于在Task进程中通知Worker进程,投递的任务已完成。此函数可以传递结果数据给Worker进程。

使用Server->finish函数必须为Server设置onFinish回调函数。此函数只可用于Task进程的onTask回调中 新版本 直接return 就行了

taskwait(mixed $data, float $timeout = 0.5, int $dstWorkerId = -1)

taskwait与task方法作用相同,用于投递一个异步的任务到task进程池去执行。与task不同的是taskwait是同步等待的,超时返回false,否则返回task结果

taskWaitMulti(array $tasks, double $timeout = 0.5)

并发执行多个task异步任务

taskCo(array $tasks, float $timeout = 0.5)

并发执行Task并进行协程调度。 区别 taskWaitMulti主进程等待

stats()

得到当前Server的活动TCP连接数,启动时间,accpet/close的总次数等信息。

heartbeat

检测服务器所有连接,并找出已经超过约定时间的连接

addListener(string $host, int $port, $type = SWOOLE_SOCK_TCP);

增加监听的端口。

liste(string $host, int $port, int $type); 此方法是 addlistener 的别名。

增加监听的端口。业务代码中可以通过调用 Server->getClientInfo 来获取某个连接来自于哪个端口。

主服务器是WebSocket或Http协议,新监听的TCP端口默认会继承主Server的协议设置。必须单独调用set方法设置新的协议才会启用新协议

addProcess(Process $process);

添加一个用户自定义的工作进程。此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。

本文章对应的视频课程:swoole从入门到精通(第一季)-学习视频教程-腾讯课堂

欢迎加入swoole/workerman技术交流群:604438441

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:13:30  更:2021-09-23 11:15:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:38:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码