如何等待websocket在应用程序关闭时正常关闭?

问题描述

我们有以下问题:

先决条件:

  • Quarkus应用程序收到WebSockets连接
  • Quarkus应用程序正在pod(Kubernetes)中运行
  • WebSockets连接正在通过2个负载均衡器(elb,Nginx)的层,但是我们确保增加了空闲连接超时(300s)
  • Websocket服务器必须等待连接关闭才能关闭
  • 服务器的客户端没有重新连接机制
  • 我们有一个关闭挂钩来等待WebSockets会话关闭

吊舱即将关闭的情况:

  • 该应用收到了SIGTERM
  • 有时某些连接(但不是全部)由于原因GOING_AWAY而关闭(表示端点正在“离开”,例如服务器关闭或浏览器已离开页面

关闭挂钩:

 void onStop(@Observes final ShutdownEvent ev) {
    long numActiveSessions = getActiveSessions();
    while (numActiveSessions > 0) {
        try {
            TimeUnit.SECONDS.sleep(waitforfinished);
        } catch (InterruptedException e) {
            return;
        }
        numActiveSessions = getActiveSessions();
    }
}

有更好的方法吗?为什么我们收到GOING_AWAY原因? quarku在收到SIGTERM时会关闭WebSocket吗?

更新: 示例项目:https://github.com/pedrolopix/quarkus-websockets-example

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)