[转载]Socket、Servlet 、Tomcat 是如何通信的

作者:匿名用户
链接:https://www.zhihu.com/question/399406330/answer/1264554578
来源:知乎

socket是操作系统提供的用于两个程序进行端到端通信的接口,是对传输层和网络层通信端点的抽象,一般来说常用的是使用TCP,UDP协议的socket(也有raw socket,也就是可以选择不使用TCP/IP协议,不过用的很少)。

然后TCP socket只提供了基于TCP的字节流通信,没有规定这个字节流里的内容代表啥,于是就需要应用层协议,也就是以HTTP,FTP,SMTP等为代表的协议,这些协议是在使用TCP协议通信的基础上定制的。那如何使用TCP进行通信?答案就是使用socket,所以socket其实跟TCP,HTTP这些不能并列讲,因为它不是协议,它是使用某个协议的进行通信的接口。UDP也一样是用socket。

tomcat属于基于HTTP协议的一个服务器程序,和前面的也不是一类的,而servlet是tomcat中一个部件,那其实跟什么通信都没啥关系了,他就是一个用于实现业务的接口,tomcat接收,解释HTTP消息内容之后交给servlet,servlet处理完生成结果之后再使用tomcat的接口把结果发给客户端,servlet只负责处理,由tomcat来收发。

所以总的来说就是,人们使用socket,让socket基于TCP/UDP等协议来保证双方能收发以字节为单位的信息,这个信息仅仅代表二进制内容,就跟你10101010可以看做字符也可以看做数一样,是没有规定其含义的。然后用HTTP协议来规定这些字节要怎么排列,分成哪几个部分,每个部分代表什么意思,这样就有了含义。最后tomcat则再使用HTTP协议,来跟客户端交换信息,交换的是什么信息则由servlet处理,最终实现一个可配置可扩展的web服务器。

网络的东西层次性是很强的,上层基于下层,servlet基于tomcat运行,tomcat基于HTTP协议进行通信,HTTP基于TCP实现,而TCP通信则是通过调用系统提供的socket函数进行,TCP是协议,socket则是实现这个协议的协议栈。同理还有类似的必如HttpClient,HttpServer这样的类,就是HTTP协议栈,是协议的软件实现,这个跟socket是一类的,只不过位于的层级不一样。

你可能感兴趣的:(servlet,tomcat,java)