2016-03-04 110 views
0

场景:我有一个node.js应用程序,它使用socket.io进行通信。如果我在本地运行它,它效果很好。然后我将部署到AWS Elastic Beanstalk。如果我在那里运行并自己使用它,它会很好。即使是少数用户,也可以正常工作。但是,一旦我开始获得大量用户,应用程序(一个聊天应用程序)就变得无法响应。有时邮件会发送,有时邮件不会发送,有时会延迟。疑难解答socket.io和EBS

我知道我已经阅读过EBS不支持网络套接字。但是,对于少数用户来说似乎没有问题。我不太确定如何测试socket.io是否真的存在问题。

这是我从运行应用程序中得到的几个日志。

“GET /socket.io/?token=MSAxNDYyMzAyNzM4NTc2IDU2OTJiNDQzZmYxYzdjYzNiOTE5MjMxZSAxODRmNmQ4NGIzNGQ0OWUzOWZiMWUwYTI1ZDhhYWVjOA%3D%3D & EIO = 3 &运输=轮询&吨= LD32u37 HTTP/1.1” 200 101

“GET /插座.IO /?标记= MSAxNDYyMzAyNzM4NTc2IDU2OTJiNDQzZmYxYzdjYzNiOTE5MjMxZSAxODRmNmQ4NGIzNGQ0OWUzOWZiMWUwYTI1ZDhhYWVjOA%3D%3D & EIO = 3 &运输= WebSocket的& SID = DZof5F5PCmmy26eEAAAA HTTP/1.1" 400 45

这两个日志来自我自己一次性使用。

我试过在两个不同的EBS实例上运行这个应用程序,负载平衡和单实例。我在两者上都得到相同类型的日志。

我不太清楚如何解决这个问题,以及如何诊断它的socket.io问题或其他问题。

有什么想法?

+0

你有没有机会在一个负载均衡的env上运行多个实例?如果是这样的话,您会错过EB – Tal

+0

@Tal的粘性会话配置,谢谢您的回应。我意识到我需要现在执行Sticky会话。你能建议实际测试这个最好的方法吗?我试图使用redis,但我无法弄清楚实际测试粘性会话是否正常工作的最佳方法。任何帮助? – Srmuhs

回答

0

我建议您启用粘性会话以确保客户端始终由同一台服务器提供服务。这应该会摆脱你提到的错误。
Sticky会话在配置=> Load Balancer =>会话粘滞性下的beanstalk控制台中启用。
要测试此功能,您可以简单地使用Chrome开发人员工具中的网络检查器。您应该能够看到您发送给服务器的请求包含cookie AWSELB,每次都有完全相同的值。这证明你在beanstalk中使用同一台服务器。另外,你的错误应该消失。