websocket服务中,是如何清掉超时无消息的连接?

问题很容易理解,但貌似不好解决。
需求背景是这样的,有个在线客服系统,客户咨询完后没结束聊天。服务端需要T超过5分钟没通信的连接。
我想到的方法就是 在心跳时,查询 最后一次通信时间,超过5分钟则断开连接。但是心跳是在客户端做的,万一客户端心跳有问题,那就失效了。

服务端做的话,估计要启动一个计划任务进程,每分钟去查询最后通信时间超时的客户,然后T掉,可是计划任务进程如何跟websocket进程通信呢?
使用swoole的IPC吗?听起来很复杂的样子。有没有简单点的?

IPC的话是不是ws进程内启动一个协程,去循环消费某个channel的消息,当该channel无消息时,一直循环,还是Co::sleep(1);一下?

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进