我正在编写一个应用程序,客户端将通过无线链接将数据上传到服务器。
连接应该非常可靠。预计链接会中断很多次,并且会有很多客户端连接到服务器。
我很困惑是使用 TCP 还是可靠的 UDP。
请分享你的想法。
谢谢。
当然,RUDP 不是一个正式的标准,也不知道您是否会找到可以使用的现有实现。如果要在从头开始滚动和重新建立 TCP 连接之间进行选择,我会选择 TCP。
为了安全起见,我会选择 TCP,因为它是一种可靠的标准协议。RUDP 的缺点是不是一个既定标准(尽管它在几个 IETF 讨论中被提及)。
祝你的项目好运!
您的 TCP 和 RUDP 链接很可能会被您的环境破坏,因此您使用 RUDP 的事实不太可能对此有所帮助;可能会有数据报无法通过的时候......
您实际需要确保的是 a) 您可以处理已连接客户端的数量,b) 当您失去与客户端(或服务器)的连接时,您的应用程序协议可以相当快速地检测到,并且 c) 您可以处理需要为客户端重新连接和维护交叉连接会话状态。
只要您处理 b) 和 c),连接是否不断断开并不重要。确保您设计了您的应用程序协议,以便您可以在短时间内完成任务;因此,如果您要上传文件,请确保您发送的是小块,并且应用程序协议可以恢复中途中断的传输;您不想通过 2gb 传输完成 99% 的传输并失去连接而不得不重新开始。
为此,您的服务器需要某种客户端会话状态缓存,您可以在其中保持客户端连接的逻辑状态超出连接本身的生命周期。从一开始就设计期望给定会话包含多个单独的连接。会话状态应该可能有某种超时,所以如果客户端离开一段时间,它不会继续消耗服务器上的资源,但老实说,这可能只是在之后将状态保存到磁盘的情况一会儿。
总之,我认为传输的选择并不重要,我至少从 TCP 开始。真正重要的是能够在服务器上管理客户端的会话状态并处理客户端将定期连接和断开连接的事实。
如果您不确定,很有可能您应该使用 TCP。一方面,它肯定会成为任何支持 IP 的网络堆栈的一部分。开箱即用的“可靠 UDP”很少受到支持,因此您将为您的客户提供一些额外的支持工作。