我在wildfly上开发了我的websocket项目。当我们在localhost或我们的本地网络上测试它时,一切正常。但是当我在AWS上部署它时,websocket不再工作了。我们可以访问其他html页面。但是当我们联系到“ws:// ip / project location”时,chrome只是表示握手错误。我在jelastic托管上遇到了同样的Web套接字问题。我的问题是
答案 0 :(得分:1)
到目前为止,平衡器不会转发websocket标头。要使WS工作,您必须拥有一个公共IP地址,并且在您的应用程序前没有其他服务。
答案 1 :(得分:1)
我建议您尝试部署到云提供商:Heroku - 他们使用node.js和websockets的示例应用程序代码将帮助您快速启动并运行。一个本地运行的websocket应用程序使用一个特定的端口 - 比如8888将在heroku上正常运行:
var port = process.env.PORT || 8888;
因为heroku在内部将部署您的应用程序,并通过PORT显示运行时生成的端口。 如果您使用带有websockets的node.js,我建议使用einaros ws implementation
var WebSocketServer = require("ws").Server;
无缝地处理ws port -vs- http端口
的概念答案 2 :(得分:1)
目前,ELB在HTTP模式下不支持Websocket。为了能够处理Websocket,您需要以tcp模式配置ELB(tcp连接的有效负载将直接发送到服务器,因此ELB不会影响http和ws流)。通过此设置,您将无法看到呼叫者IP。
如果没有ELB Websocket完美运行(AWS只看到ip流量,而OS只看到tcp),我们就没有为普通的旧http服务器改变任何东西以便使用WS(除了Web中的WS处理代码)服务器)。
要知道您是否正在使用ELB查看账单,AWS可以为您提供许多非常有趣的服务,但需要付费。