我在wildfly上开发了websocket项目。当我们在本地主机或本地网络中进行测试时,一切正常。但是当我把它部署到AWS上时,websocket就不再工作了。我们可以访问其他html页面。但是当我们连接到"ws://ip/项目位置"时,chrome只是说握手错误。我在jelastic hosting上也遇到过同样的web套接字问题。我的问题是
- 为什么会发生这样的事情?websocket协议不够稳定吗?
- 在java中有适合websocket项目的主机吗?
到目前为止,均衡器不转发websocket头。要使WS工作,您必须有一个公共IP地址,并且在您的应用程序前面没有其他服务。
我建议你尝试部署到云提供商:Heroku -他们使用node.js和websockets的示例应用程序代码将让你快速启动和运行。本地运行的websocket应用程序使用特定的端口,比如8888,可以在heroku上运行:
var port = process.env.PORT || 8888;
as heroku将在内部使用运行时生成的端口来部署你的应用,该端口通过port可见。如果你正在使用node.js与websockets,我建议使用einaros ws实现
var WebSocketServer = require("ws").Server;
无缝地处理ws端口vs HTTP端口的概念
目前ELB不支持HTTP模式下的Websocket。为了能够处理Websocket,你需要在tcp模式下配置ELB (tcp连接的有效载荷将直接发送到服务器,因此ELB不会影响http和ws流)。设置此设置后,您将无法看到调用方ip。
如果没有ELB Websocket可以完美地工作(AWS只看到ip流量,OS只看到tcp流量),为了使用WS,我们没有为一个普通的旧http服务器改变任何东西(除了web服务器中的WS处理代码)。
要知道您是否在使用ELB,请查看账单,AWS可以为您提供许多非常有趣的服务,但需要付费。