问题很容易理解,但貌似不好解决。
需求背景是这样的,有个在线客服系统,客户咨询完后没结束聊天。服务端需要T超过5分钟没通信的连接。
我想到的方法就是 在心跳时,查询 最后一次通信时间,超过5分钟则断开连接。但是心跳是在客户端做的,万一客户端心跳有问题,那就失效了。
服务端做的话,估计要启动一个计划任务进程,每分钟去查询最后通信时间超时的客户,然后T掉,可是计划任务进程如何跟websocket进程通信呢?
使用swoole的IPC吗?听起来很复杂的样子。有没有简单点的?
IPC的话是不是ws进程内启动一个协程,去循环消费某个channel的消息,当该channel无消息时,一直循环,还是Co::sleep(1);一下?