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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_33716731

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值