为什么websocket不能在云上工作?

时间:2014-07-18 07:28:24

标签: amazon-web-services websocket handshake jsr356

我在wildfly上开发了我的websocket项目。当我们在localhost或我们的本地网络上测试它时,一切正常。但是当我在AWS上部署它时,websocket不再工作了。我们可以访问其他html页面。但是当我们联系到“ws:// ip / project location”时,chrome只是表示握手错误。我在jelastic托管上遇到了同样的Web套接字问题。我的问题是

  1. 为什么会这样?
  2. websocket协议不够稳定吗?
  3. 在java中是否有适合的websocket项目托管?

3 个答案:

答案 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可以为您提供许多非常有趣的服务,但需要付费。