node.js - 谷歌云应用引擎抗socket.io连接
问题描述
我最近使用 socket io 部署了一个 node.js 应用程序进行实时聊天,并且最初遇到了套接字连接问题。我通过使用以下 app.yaml 配置解决了这个问题
runtime: nodejs
env: flex
manual_scaling:
instances: 1
network:
session_affinity: true
但现在我的问题是这个规模如何?当然,单个实例将无法处理大量流量。我在没有手动缩放实例的情况下尝试了它,但我仍然遇到套接字问题(可能是因为正在交谈的两个人连接到不同的实例?)。
如何确保在支持套接字连接的同时正确扩展?
解决方案
通常,对于您的应用程序而言,不知道哪个实例将服务于请求是一种很好的做法。
但是,如果您的用例无法做到这一点,您可以查看App Engine Flexible 文档,该文档Session affinity
仅在尽力而为的基础上得到保证:
App Engine 中的会话亲和性是在尽力而为的基础上实现的。在开发您的应用程序时,您应该始终假设不能保证会话亲和性。
...
因为不能保证会话亲和性,所以你应该只使用它来利用 socket.io 和其他库的能力,以便在连接断开的情况下回退到 HTTP 长轮询。您永远不应该使用会话亲和性来构建有状态的应用程序。
您可能想要探索的一种可能性是在仅使用 1 个实例维护服务的同时分配更多资源,而不是通过生成更多实例来水平扩展您的应用程序。
推荐阅读
- angular - 可以在没有服务器(离线)的情况下运行 Angular 8 应用程序吗?
- node.js - 我们可以在所有同步或异步函数(NodeJS)中使用 try catch 吗?
- linux - 强制 sh shell 使用外部函数而不是内置函数
- continuous-integration - 使用 Lambda 函数的 AWS 代码管道
- c# - 简单的游戏如何让电脑先走?
- .net - Microsoft 对 .NET 中的 HEIF/HEIC 的支持?
- html - 如何对齐列表元素之间的空间
- html -
- c++ - 如果一个字符串在 C/C++ 中没有 NUL 字符会发生什么(以防编译器让它通过)?
- rxjs - RxJs - 动作完成后 Redux-Observable 导航