| |
|
开发:
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属性方法回调函数(三) |
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 onon(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); 添加一个用户自定义的工作进程。此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。
|
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |