使用TCP通信相比HTTP通信有什么优势?

3

我已经使用TCP实现了一个客户端服务器Java程序来完成一个任务。现在我需要解释为什么我选择了TCP进行通信,而其他替代方案如HTTP也是可用的。因此,我需要一些理由来说明TCP比其他方案更好。


4
Http使用TCP,因此将它们进行比较并不是很合适......假设问题是“当更开放、标准化的格式(如http)已经存在时,为什么要选择专有的实现而不是TCP?” - Nathan
3个回答

11

HTTP不是TCP的替代品。它是建立在TCP之上的协议。

当在TCP上实现自定义互动协议时,比起HTTP,效率可以更高,因为HTTP是基于一种相当基本的请求/响应机制的*

在纯TCP连接中,两端可以随时发送消息。而在HTTP中,服务器不能主动向客户端发送消息,它需要等待客户端发送请求。

HTTP的一个优点是几乎被广泛理解:为所有语言提供了服务器和客户端库,有着被熟知的缓存和代理机制以及丰富多样的内容协商机制。

所以这是传统的高层或低层抽象之间的权衡:

  • 低层抽象(TCP)提供了高灵活性和几乎可以实现所有功能的可能性,但使用起来没有那么简单
  • 高层抽象(HTTP)提供了更多内置功能并且更容易支持,但是添加额外功能较为困难
免责声明:此答案是在HTTP/1.1时代编写的,该语句对于HTTP/2和HTTP/3来说比现在更准确。虽然它们仍然是基本的请求/响应协议,但它们具有许多先进功能,使它们的使用不像“传统”的HTTP/1.1那样受限制。

4

HTTP是基于TCP的协议。它具有特定的功能,但缺少其他功能(最显著的是状态性和服务器发起通信的能力)。如果您需要HTTP难以实现或无法实现的功能,则建议使用其他协议。

或者,您可以在HTTP之上构建这些功能,这似乎是最流行的选择(可能是因为“仅端口80处于开放状态,因此让我们将其用于所有内容”的问题),但往往会导致非常不好的破解。


3
TCP不能说是更好的。它是OSI模型的传输(第四)层协议。 HTTP是一个应用程序协议(第七层)。
它们是不同的,HTTP基于TCP。
HTTP基本上用于网站、Web服务等网络通信。可以说HTTP是面向客户端的:客户端请求服务器获取某些数据并接收响应。然后再发送另一个请求,以此类推。 TCP是一种基础协议,它保证了所有发送的信息都将按照相同的顺序和完整性接收。
在维基百科上阅读它们的相关内容:HTTPTCP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接