【发布时间】:2012-07-25 00:03:35
【问题描述】:
我正在为我的应用程序的服务器客户端方面选择什么技术而苦恼。
定义设计
- .net 2 上的 Windows、C#
- 在许多机器上都有 .net 2 服务。我称之为客户。
- 机器可以位于 NAT 后面(或未连接到 Internet)的不同网络中。
- 服务器服务是公开的。
要求
- 按需与客户沟通。
- 客户端必须监听传入的连接。
- 服务器可以在线也可以不在线。
- 无法进行端口转发。
我有哪些选择来做这样的事情? 现在我正在研究 UDP 打孔技术。 UDP 打孔技术设置和我的设置之间的区别在于,我没有在 NAT 和中介服务器后面有 2 个客户端,而是在 NAT 后面只有一个必须与服务器通信的客户端。那一定更容易,但我很难理解和实施。 我在这种 NAT 遍历方面走在正确的道路上,或者可能是其他一些更容易实现的方法?
我考虑过的其他方法:
-
当服务看到服务器在线时,使用 TCP 创建到服务器的连接。问题是我有大约 200 个客户,而且这个数字还在上升,我担心这是一个资源杀手。
-
当服务看到服务器在线时,检查数据库表中的命令,然后每 30 秒再次检查一次。这也是我服务器的资源杀手。
最重要的是,如果 UDP Hole Punching 技术是这种情况下的正确方法,请提供一些代码想法,用于将在 NAT 后面的服务上运行的 de UDPServer。
谢谢。
【问题讨论】:
-
您能否更具体地说明第一个要求...“按需与客户沟通。”客户端是否需要相互通信(点对点),还是客户端和服务器之间的唯一通信?如果客户端不需要直接通信(不是 p2p),那么这不是 nat 遍历问题。只要服务器是公共的并且客户端可以访问公共互联网,那么通信就“正常”。
标签: networking udp client-server nat-traversal