我已经使用TCP实现了一个客户端服务器Java程序来完成一个任务。现在我需要解释为什么我选择了TCP进行通信,而其他替代方案如HTTP也是可用的。因此,我需要一些理由来说明TCP比其他方案更好。
HTTP不是TCP的替代品。它是建立在TCP之上的协议。
当在TCP上实现自定义互动协议时,比起HTTP,效率可以更高,因为HTTP是基于一种相当基本的请求/响应机制的*。
在纯TCP连接中,两端可以随时发送消息。而在HTTP中,服务器不能主动向客户端发送消息,它需要等待客户端发送请求。
HTTP的一个优点是几乎被广泛理解:为所有语言提供了服务器和客户端库,有着被熟知的缓存和代理机制以及丰富多样的内容协商机制。
所以这是传统的高层或低层抽象之间的权衡:
HTTP是基于TCP的协议。它具有特定的功能,但缺少其他功能(最显著的是状态性和服务器发起通信的能力)。如果您需要HTTP难以实现或无法实现的功能,则建议使用其他协议。
或者,您可以在HTTP之上构建这些功能,这似乎是最流行的选择(可能是因为“仅端口80处于开放状态,因此让我们将其用于所有内容”的问题),但往往会导致非常不好的破解。