【问题标题】:Running a HTTPS SSE server over Kubernetes/Ingress and Google Cloud Platform在 Kubernetes/Ingress 和 Google Cloud Platform 上运行 HTTPS SSE 服务器
【发布时间】:2017-06-23 20:07:39
【问题描述】:

我在 VPS 上运行 SSE 服务器,它运行良好,完全没有问题,但由于可扩展性的原因,我需要将其移至另一台服务器。

我将服务器移至 Google Cloud Platform/Google Container EngineKubernetes/Ingress。但是现在我遇到了无法有效保持SSE连接,完全不稳定,会自行关闭连接。

为了在 Kubernetes/Ingress 上运行 SSE 服务器,我需要做些什么特别的事情吗?

我假设我的代码/软件运行完美,这不是问题,因为它在 Kubernetes、VPS、我的机器上、任何地方都能完美运行,只是在我添加 Ingress 配置时不行,我这样做是因为我想要 HTTPS 而不是 Kubernetes 负载平衡器

【问题讨论】:

  • Here 是询问服务器相关问题的正确网站。
  • 您使用什么样的服务器/技术作为 Web 服务器?爪哇? C#?

标签: sockets google-app-engine google-cloud-platform kubernetes google-compute-engine


【解决方案1】:

我做不到,它可能对某些客户有效,对其他客户无效,对此的解释是 kubernetes 的行为方式, 假设您的应用程序中有 3 个节点,一个节点是虚拟机,当发出请求时,kubernetes 必须决定在哪个虚拟机中运行,如果是 SSE 这种连接必须持续到客户端关闭您的应用程序,因此考虑到这一点,让我们假设您有一个聊天应用程序。 所以我们有两个客户端,现在让我们假设 kubernetes 总是将客户端 1 和 2 重定向到节点 1

当 SSE 连接(绿线)建立时,这将持续存在,现在让我们假设客户端 1 发送消息,正如我之前所说的那样,一切都通过节点 1, 节点将处理此请求,如果接收器已连接,您的应用程序将在内存中查找,如果已连接,它将通过 SSE 连接 发送消息,在这种情况下一切正常,问题是当客户端未重定向到同一个节点

当客户端发送消息时, 这将通过节点 1,但是在检查客户端 2 是否已连接时,它不会找到连接,因为此连接未保存在此节点中,因此客户端 2 不会收到此消息。要解决此问题,您将需要一个新的结构,您需要一个专用于 SSE 连接的实例,因此当客户端连接到 sse 时,它​​将转到专用实例 当客户端1发送消息 节点将与此专用实例通信,并将向客户端 2 发送消息

现在要创建您应该使用的专用服务器和外部源服务(如果需要),或者更好的是,您可以创建自己的实例并将您的 sse 端点重定向到 SSE 实例,您可以使用负载平衡来执行此操作,这充当代理,它将根据传入的 URL more info 决定重定向到哪个资源 您还需要在此专用 SSE 服务器中配置不要关闭快速连接

【讨论】:

    【解决方案2】:

    通过在超时时间上添加很长的时间来使其正常工作:86,400 秒。这是因为它是一个需要保持打开的套接字连接,而不是一个需要不到 30 秒才能执行的普通连接。

    【讨论】:

    • 你是怎么做到的?
    【解决方案3】:

    我不知道 SSE 在这种情况下意味着什么,但是是的,您需要正确设置您的 Ingress Controller 以管理长期会话。

    你用的是什么类型的Ingress

    【讨论】:

    • SSE 在这种情况下代表服务器发送事件。是的,我设法通过将连接的超时设置为一天来让它工作,因为它是一个套接字连接,需要比普通连接更多地打开。
    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2019-10-05
    • 1970-01-01
    • 2014-11-26
    • 2020-04-08
    • 2020-07-06
    • 2016-08-23
    • 2020-11-12
    相关资源
    最近更新 更多