Alchemy Websockets:无法在 Azure 上托管服务器
Posted
技术标签:
【中文标题】Alchemy Websockets:无法在 Azure 上托管服务器【英文标题】:Alchemy Websockets: Can't host server on Azure 【发布时间】:2013-10-28 18:11:37 【问题描述】:我目前正在使用Alchemy Websockets 作为我的 WebSocket 解决方案,但是事实证明这很痛苦,因为我花了很多时间试图弄清楚为什么我无法启动它并继续我的WebRole(在 Compute Emulator 和 cloudapp.net 本身上)。它在本地运行好的。
我知道this question that was asked previously,并且我已经按照代码中的所有内容并完成了建议的所有内容,所以我不明白为什么我仍然无法连接到我的 WebSocket 服务器。我尝试使用WebSocket.org's Echo Test 以及android 客户端(利用Autobahn)进行连接。考虑到这两种方法都不起作用,我很确定这不再是客户端问题,而是服务器端问题(是什么阻止我在 Azure 上打开 WebSocket 服务器?!)。
总结一下,到目前为止我做了什么:
-
在我的 Azure 中包含 TCP InputEndpoint 8080
使用端口 8080 在
Global.asax
或 RoleEntryPoint
中启动 WebSocket 服务器
尝试使用 Android 版 Echo Test 和 Autobahn 进行连接
如果有帮助,我之前尝试过SuperWebSocket Server。我知道创建者 Kerry Jiang 已经上传了一些 Azure 示例,但是命令程序集让我感到困惑,我不想在我的应用程序中添加那种额外的逻辑(我只想要一些我可以即插即用的东西),所以我决定完全放弃。
Alchemy Websockets 和 SuperWebSocket Server 在本地工作得非常好,但是当它在 Azure 上时(无论是在 cloudapp.net 上上传的模拟器),我似乎根本无法连接。请指导...?
【问题讨论】:
我对 Azure 几乎一无所知,但您可能会遇到一个问题:与 WebSocket 不兼容或过滤的中介(防火墙、负载均衡器等网络设备)它积极地。这是我会尝试的:使用安全的 WebSocket (WSS)。终止服务器上的 TLS。使用超过标准 443 的有效证书运行它。这将排除中介的干扰。 谢谢兄弟!在将 VM 的防火墙配置为接受传入端口请求 (here's the link) 后,它就可以工作了!你可以写一个快速的答案,我会感谢它。但是有一个问题,我的 VM 上的 CPU 使用率始终为 100%,我的 WebSocket 实现有什么问题?? 对不起,我不使用 .Net、SuperWebSocket 和 Azure。我会联系服务器框架的作者。一般来说,我可以向您保证:您可以将 WS 与功能强大的服务器一起使用,这些服务器不会在数百万个 WS 上产生任何(显着)CPU 负载(当然,当它们空闲时)。 【参考方案1】:将 WebSocket 与云托管 VM 结合使用时,可能会出现许多问题:
云服务可能有防火墙,默认情况下会阻止任何(非标准)端口。在 Amazon EC2 上,您可以通过 AWS 管理控制台以及适用于运行 WS 服务器的 EC2 实例的“安全组”的相应配置来配置开放(未阻止)的入站端口。
即使您使用标准 Web 端口(如 80)并且此端口在防火墙中打开,也可能存在不支持 WebSocket 的代理、负载平衡器或其他所谓的中介。
在非本地网络上运行时,存在各种可能干扰的中介。例如,移动网络提供商的中介对于 WebSocket 来说太愚蠢了(它使用 HTTP 标准升级机制 .. 它是标准的 .. 但那里有很多损坏的东西)。
要解决 2. 和 3.(以及一般情况),您可能希望在生产环境中通过 TLS(安全 WebSocket .. WSS)运行 WebSocket。在 TLS 上运行,并终止 TLS 连接在您的服务器上,没有中介可以干扰(即使在这里也有例外 .. 解开 TLS 的所谓 MITM HTTPS 代理 .. 但仅在某些公司网络上并且依赖于代理能够在用户的浏览器中动态安装证书)。
要建立可靠的 WSS 连接,您必须确保所使用的服务器证书被浏览器接受而没有任何问题。如果它是自签名的,例如,浏览器通常不会接受,但会询问用户他是否仍想接受。使用 WS,浏览器不会呈现这样的对话框,因为 WS 是所谓的“子资源”。因此:确保您的证书 100% 正常。
随着 5. 的完成,WebSocket(然后是 WSS),将(几乎)一直工作。移动、企业、公共互联网。
【讨论】:
以上是关于Alchemy Websockets:无法在 Azure 上托管服务器的主要内容,如果未能解决你的问题,请参考以下文章
没有 SSL 的 WebSocket 在 Chrome 中不起作用