微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何等待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 举报,一经查实,本站将立刻删除。