swoft-cloud / swoft

🚀 PHP Microservice Full Coroutine Framework
https://swoft.org
Apache License 2.0
5.58k stars 786 forks source link

请问websocket这块有心跳检测吗? #345

Closed yyyThree closed 6 years ago

yyyThree commented 6 years ago

如果没有的话打算用定时任务做了..

inhere commented 6 years ago

你看下swoole官方的服务settings配置,有心跳方面的配置

yyyThree commented 6 years ago

@inhere 找到了,heartbeat_check_interval,加到swoft配置这里吗? image

inhere commented 6 years ago

嗯 加到 config/server.php 的setting 里,会应用到swoole server上

yyyThree commented 6 years ago

@inhere 嗯,可以了。还想请问下我想在swoft websocket服务启动的时候立即执行一些操作,比如清空websocket连接记录表等,该如何添加?

inhere commented 6 years ago

可以添加事件监听 @ServerListener(event name) 基本上swoole启动阶段的事件都可监听,你搜下 SwooleEvent 这个类。可以通过idea点击这个类反向搜索使用了的地方作参考

监听server启动前,处理你这个事

yyyThree commented 6 years ago

@inhere 好的,多谢

yyyThree commented 6 years ago

@inhere 今天刚有时间搞,请问我该监听swoole哪个事件比较合适,如果是onWorkerStart的话请求数达到max_request值,worker进程就会重启,又会触发一遍,我试了下重启后监听到的workId和第一次启动的wordId是一样的。 image

inhere commented 6 years ago

workId 肯定会重用的, 你该观察 worker 的PID。

你要监听什么事件? 做撒?

yyyThree commented 6 years ago

@inhere 我做的websocket服务,想监听worker启动,然后初始化一些数据,现在的问题就是可能会重复处理

inhere commented 6 years ago

那就监听master 或者 manager 启动事件,这样就会只执行一次。

或者通过外部标记来判断是否初始化过了,比如写个文件,读一个缓存value

yyyThree commented 6 years ago

@inhere 嗯,打算监听manager事件了,其实如果worker进程没有达到max_request就重启的机制或者重启的workId不用之前的,产生一个新的workId的话也可以监听workerStart,顺便问一句,master 和 manager 进程会有重启机制吗

yyyThree commented 6 years ago

@inhere 尴尬了,在app/Listener下面加了连个监听方法测试,分别监听worker和manager,work可以监听到,manager监听不到。 image image image

inhere commented 6 years ago

重新启动了吗 ? 试试监听 BeforeStart(创建server之前) 或者 MasterStart 的呢

yyyThree commented 6 years ago

@inhere 重启了,尝试了很多次manager启动监听不到,worker可以。SwooleEvent里我好像没找到MasterStart,看swoole文档好像说master回调已经被删了。 image image

inhere commented 6 years ago

将这个问题重新提个issue.

你可以跟进去看下 触发manager start 事件的地方。可能的话先自己修复下。