首页 > 解决方案 > 谷歌云应用引擎抗socket.io连接

问题描述

我最近使用 socket io 部署了一个 node.js 应用程序进行实时聊天,并且最初遇到了套接字连接问题。我通过使用以下 app.yaml 配置解决了这个问题

runtime: nodejs
env: flex
manual_scaling:
  instances: 1
network:
  session_affinity: true

但现在我的问题是这个规模如何?当然,单个实例将无法处理大量流量。我在没有手动缩放实例的情况下尝试了它,但我仍然遇到套接字问题(可能是因为正在交谈的两个人连接到不同的实例?)。

如何确保在支持套接字连接的同时正确扩展?

标签: node.jsgoogle-app-enginesocket.io

解决方案


通常,对于您的应用程序而言,不知道哪个实例将服务于请求是一种很好的做法。

但是,如果您的用例无法做到这一点,您可以查看App Engine Flexible 文档,该文档Session affinity仅在尽力而为的基础上得到保证:

App Engine 中的会话亲和性是在尽力而为的基础上实现的。在开发您的应用程序时,您应该始终假设不能保证会话亲和性。

...

因为不能保证会话亲和性,所以你应该只使用它来利用 socket.io 和其他库的能力,以便在连接断开的情况下回退到 HTTP 长轮询。您永远不应该使用会话亲和性来构建有状态的应用程序。

您可能想要探索的一种可能性是在仅使用 1 个实例维护服务的同时分配更多资源,而不是通过生成更多实例来水平扩展您的应用程序。


推荐阅读