我正在为我的应用程序的服务器客户端方面选择什么技术而苦苦挣扎。
定义设计
- .net 2 上的 Windows、C#
- 在许多机器上都有 .net 2 服务。我称之为客户。
- 机器可以位于连接到 Internet 的 NAT(或不连接)后面的不同网络中。
- 服务器服务是公开的。
要求
- 按需与客户沟通。
- 客户端必须侦听传入连接。
- 服务器可以在线也可以不在线。
- 端口转发是不可能的。
我有什么选择去做这样的事情?现在我正在研究 UDP 打孔技术。UDP 打孔技术设置和我的设置之间的区别在于,我没有在 NAT 和中介服务器后面有 2 个客户端,而是在 NAT 后面只有一个必须与服务器通信的客户端。那一定更容易,但我很难理解和实施。我在这种 NAT 遍历方面走在正确的道路上,或者可能是其他一些更容易实现的方法?
我考虑过的其他方法:
当服务看到服务器在线时,使用 TCP 创建到服务器的连接。问题是我有大约 200 个客户,而且这个数字还在上升,我担心这是一个资源杀手。
当服务看到服务器在线时,检查数据库表中的命令,然后每 30 秒再次检查一次。这也是我的服务器的资源杀手。
底线是,如果 UDP Hole Punching 技术是这种情况下的正确方法,请为将在 NAT 后面的服务上运行的 de UDPServer 提供一些代码想法。
谢谢你。