您的位置:首页 >> Workerman >> 和屌丝一起学Workerman—Events类的使用方法

和屌丝一起学Workerman—Events类的使用方法

[ 孤狼 | 2020-05-10 15:41:55 | Workerman | 5444°C | 0条评论 ]

Events::onWorkerStart

void Event::onWorkerStart(Worker $businessWorker);

$businessWorker=>businessWorker进程实例

当businessWorker进程启动时触发。每个进程生命周期内都只会触发一次。

可以在这里为每一个businessWorker进程做一些全局初始化工作,例如设置定时器,初始化redis等连接等。

注意:$businessworker->onWorkerStart和Event::onWorkerStart不会互相覆盖,如果两个回调都设置则都会运行。

不要在onWorkerStart内执行长时间阻塞或者耗时的操作,这样会导致BusinessWorker无法及时与Gateway建立连接,造成应用异常(SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready错误)。


Events::onConnect

void Events::onConnect(string $client_id);

当客户端连接上gateway进程时触发。

client_id固定为20个字的字符串,用来全局标记一个socket连接,每个客户端连接都会被分配一个全局唯一的client_id。

如果client_id对应的客户端连接断开了,那么这个client_id也就失效了。当这个客户端再次连接到Gateway时,将会获得一个新的client_id。也就是说client_id和客户端的socket连接生命周期是一致的。

client_id一旦被使用过,将不会被再次使用,也就是说client_id是不会重复的,即使分布式部署也不会重复。

只要有client_id,并且对应的客户端在线,就可以调用Gateway::sendToClient($client_id, $data)等方法向这个客户端发送数据。

$client_id是服务端自动生成的并且无法自定义。

如果开发者有自己的id系统,可以用Gateway::bindUid($client_id, $uid)把自己系统的id与client_id绑定,绑定后就可以通过Gateway::sendToUid($uid)发送数据,通过Gateway::isUidOnline($uid)用户是否在线了。


Events::onMessage

void Events::onMessage(string $client_id, mixed $recv_data);

当收到一个客户端请求后触发

$client_id=>全局唯一的客户端socket连接标识

$recv_data=>完整的客户端请求数据,数据类型取决于Gateway所使用协议的decode方法返的回值类型


Events::onClose

void Events::onClose(string $client_id);

客户端与Gateway的连接断开时触发。不管是客户端主动断开还是服务端主动断开,都会触发这个回调。一般在这里做一些数据清理工作。

$client_id=>全局唯一的client_id

注意:onClose回调里无法使用Gateway::getSession来获得当前用户的session数据,但是仍然可以使用$_SESSION变量获得。


Events::onWorkerStop

void Event::onWorkerStop(Worker $businessWorker);

当businessWorker进程退出时触发。每个进程生命周期内都只会触发一次。

可以在这里为每一个businessWorker进程做一些清理工作,例如保存一些重要数据等。

注意:某些情况将不会触发onWorkerStop,例如业务出现致命错误FatalError,或者进程被强行杀死等情况。

$businessWorker=>businessWorker进程实例



转载请注明出处:http://gl.paea.cn/n.php?n=129
 
如您看得高兴,欢迎随意投喂,让我们坚持创作!
赞赏一个鸡腿
还没有人留下遗迹
综合 · 搜索