为什么 websocket 在云上不起作用?



我在wildfly上开发了websocket项目。当我们在本地主机或本地网络中进行测试时,一切正常。但是当我把它部署到AWS上时,websocket就不再工作了。我们可以访问其他html页面。但是当我们连接到"ws://ip/项目位置"时,chrome只是说握手错误。我在jelastic hosting上也遇到过同样的web套接字问题。我的问题是

    为什么会发生这样的事情?websocket协议不够稳定吗?
  1. 在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可以为您提供许多非常有趣的服务,但需要付费。

相关内容

  • 没有找到相关文章

最新更新