长轮询胜过WebSocket:一个可扩展实时系统的实践

2025-01-05

Inferable团队在构建基于Node.js和TypeScript的可扩展实时系统时,选择了长轮询而非WebSocket。他们面临着数百个工作节点需要实时获取新任务以及代理需要实时状态更新的挑战。长轮询通过保持HTTP连接打开直到有新数据或超时,有效地解决了这两个问题,避免了WebSocket带来的复杂性,例如身份验证、可观察性以及基础设施兼容性问题。文章详细介绍了他们的长轮询实现,包括数据库优化、错误处理以及最佳实践,例如强制TTL、客户端可配置TTL以及合理的数据库轮询间隔。他们最终选择长轮询是因为其对消息传递机制的精细控制、零外部依赖以及易于理解和修改等优点。文章也简要讨论了ElectricSQL等替代方案,并指出了WebSocket的适用场景。

开发 长轮询