0

我目前正在使用Alchemy Websockets作为我的 WebSocket 解决方案,但是事实证明这很痛苦,因为我花了很多时间试图弄清楚为什么我无法启动它并继续使用我的 WebRole(两者都在Compute Emulator 和 cloudapp.net 本身)。它在本地运行正常。

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

总而言之,我到目前为止所做的事情:

  1. 在我的 Azure 中包含 TCP InputEndpoint 8080
  2. 在端口 8080中Global.asax或使用端口启动 WebSocket 服务器RoleEntryPoint
  3. 尝试使用适用于 Android 的 Echo Test 和 Autobahn 进行连接

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

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

4

1 回答 1

3

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

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

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

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

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

  5. 要建立健壮的 WSS 连接,您必须确保所使用的服务器证书被浏览器接受而没有任何问题。例如,如果它是自签名的,浏览器通常不会接受,但会询问用户他是否仍想接受。使用 WS,浏览器将不会呈现这样的对话框,因为 WS 是所谓的“子资源”。因此:确保您的证书 100% 正常。

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

于 2013-11-02T07:40:13.227 回答