Alchemy Websockets:无法在 Azure 上托管服务器

本文关键字:服务器 Azure Websockets Alchemy | 更新日期: 2023-09-27 18:37:14

我目前正在使用Alchemy Websockets作为我的WebSocket解决方案,但是事实证明这是一个痛苦的过程,因为我花了相当多的时间试图弄清楚为什么我不能启动它并继续我的WebRole(在计算模拟器和 cloudapp.net 本身)。它在本地运行良好

我知道之前问过的这个问题,并且我已经遵循了代码中的所有内容并完成了所有建议,所以我无法理解为什么我仍然无法连接到我的 WebSocket 服务器。我尝试使用WebSocket.org的Echo Test以及Android客户端(利用Autobahn)进行连接。我很确定这不再是客户端问题,考虑到这两种方式都不起作用,而更多的是服务器端问题(是什么阻止我在 Azure 上打开 WebSocket 服务器?!

总之,到目前为止我所做的:

  1. 在我的 Azure 中包含 TCP 输入终结点 8080
  2. 使用端口 8080 在 Global.asaxRoleEntryPoint中启动 WebSocket 服务器
  3. 尝试使用Echo Test和Autobahn for Android进行连接

如果有帮助,我以前尝试过SuperWebSocket Server。我知道创建者 Kerry Jiang 上传了一些 Azure 示例,但命令程序集让我感到困惑,我不希望在我的应用程序中使用这种额外的逻辑(我只想要一些可以即插即用的东西),所以我决定完全放弃它。

Alchemy Websockets和SuperWebSocket Server在本地都可以正常工作,但是当它在Azure上时(任何一个模拟器上传到 cloudapp.net 上),我似乎根本无法连接。请提供任何指导...?

Alchemy Websockets:无法在 Azure 上托管服务器

将 WebSocket 与云托管的 VM 一起使用时,可能会出现许多问题:

    云服务可能具有防火墙,默认情况下会
  1. 阻止任何(非标准)端口。在 Amazon EC2 上,您可以通过 AWS 管理控制台配置开放(畅通)入站端口,以及适用于运行 WS 服务器的 EC2 实例的"安全组"的相应配置。

  2. 即使您使用标准 Web 端口(如 80),并且此端口在防火墙中处于打开状态,也可能存在无法识别 WebSocket 的代理、负载平衡器或其他所谓的中介。

  3. 在非本地网络上运行时,有各种中介可能会干扰。例如,移动网络提供商的中介对于WebSocket来说太愚蠢了(它使用HTTP标准升级机制......它是标准的......但那里有很多破碎的东西)。

  4. 解决 2. 和 3.(以及一般情况下),您可能希望通过TLS运行WebSocket(安全WebSocket.。WSS)在生产中。通过TLS运行,并在您的服务器上终止TLS连接,没有中介可以干扰(即使在这里也有例外......所谓的MITM HTTPS代理解开TLS......但这仅在某些公司网络上,并且依赖于代理能够在用户的浏览器中动态安装证书)。

  5. 要建立可靠的 WSS 连接,必须确保浏览器可以毫无问题地接受所使用的服务器证书。例如,如果它是自签名的,浏览器通常不会接受,但会询问用户是否仍然愿意接受。使用 WS,浏览器不会呈现这样的对话框,因为 WS 是所谓的"子资源"。因此:确保您的证书 100% 正常。

  6. 随着5.的完成,WebSocket(然后是WSS)(几乎)一直工作。移动、企业、公共互联网。