....NET 4.0 现在有哪些选项,以某种方式支持客户端的 NAT(即 NAT 后面的客户端)。
我更喜欢使用基于 HTTP 的东西,但这是一个弱条件 - 我认为中期我无论如何都会在 WCF 之外进行一些非 http 通信,所以我可以延迟代理遍历。
在 .NET 4.0 之前,存在一个问题,即基本上服务器->客户端通道将从服务器打开,这使得 NAT 成为不可遍历的东西。
轮询是不可接受的 - 我们在这里讨论时间敏感信息。
那么,我现在有哪些选择?
....NET 4.0 现在有哪些选项,以某种方式支持客户端的 NAT(即 NAT 后面的客户端)。
我更喜欢使用基于 HTTP 的东西,但这是一个弱条件 - 我认为中期我无论如何都会在 WCF 之外进行一些非 http 通信,所以我可以延迟代理遍历。
在 .NET 4.0 之前,存在一个问题,即基本上服务器->客户端通道将从服务器打开,这使得 NAT 成为不可遍历的东西。
轮询是不可接受的 - 我们在这里讨论时间敏感信息。
那么,我现在有哪些选择?
您可以从客户端打开连接并保持打开状态。或者将 NAT 上的端口转发到客户端,因此连接到 NAT:34823 将转到 192.168.xxx.xxx:80。或者付给微软一些钱来使用他们的服务总线,这还没有完全完成,未来也不确定。或者做一些巧妙的修改,在客户端和服务器上安装 Skype,通过 API 发送消息。
这不是特定于 .net 4.0,但您可以使用 Windows Azure 服务总线。
如果您的应用程序需要双向连接,您实际上有两种选择:要么押注可用的变通方法并承担后果(就像 BitTorrent 所做的那样),要么为您的应用程序构建和运行某种形式的中继服务。中继服务接受并维护来自防火墙和/或 NAT 客户端的连接,并在它们之间路由消息。几乎所有聊天、即时消息、视频会议、VoIP 和多人游戏应用程序以及许多其他流行的 Internet 应用程序都依赖于某种形式的中继服务。
中继服务的挑战在于,它们很难以一种可以提供互联网规模的方式构建,它们需要在数千甚至数百万个连接之间进行路由,就像大型即时消息网络所做的那样。一旦你有一个可以支持这种规模的中继,它的运营成本就会非常高。事实上,如此昂贵的投资和由此产生的运营成本对于绝大多数软件公司来说是完全遥不可及的。连通性挑战是一个真正的创新障碍,代表了一个重要的进入壁垒。
好消息是 Microsoft .NET 服务总线提供了一系列双向、对等连接选项,包括中继通信。您不必自己构建或运行自己的;您可以改用此 Building Block。.NET 服务总线涵盖四个逻辑功能区域:命名、注册表、连接和事件。
http://vasters.com/clemensv/PermaLink,guid,92d78bee-2cfd-4a29-95ab-c5abb9b905e7.aspx