如何用Java实现Web服务器?
WEB容器工作原理
市面上的java web容器常见的有两种,一种是jetty,一种是tomcat。要想用java实现web容器,首先要知道其工作原理。
以Tomcat为例,我们通常开发出来的war包,会放在tomcat中的webapp下面,tomcat会自动解压war包。解压完成后,其实就是一个servlet应用!换句话说,我们写的war包中的servlet应用只需要关注业务层面的,处理http等网络链接的事情交给都交给tomcat了, 一个请求到达tomcat的流程如下图:
所以其实我们也可以手写一个web容器,只要能接收请求并转发给相应的servlet请求即可。
手写一个小的web容器
整体结构大致如下
1、写一个处理网络请求连接请求实体类、一个和网络请求连接响应实体类
2、写一个容器主类,包括启动监听端口等
3、写容器的接口,以及注解相关的url附加类便于让应用servlet
4、写一个app测试servlet,类似tomcat中跑的war包
如果你监听的端口是8888,那么就可以访问localhost:8888/app,就可以测试了
结语
java写web容器,其实没什么难的,简单的写一下了解一下原理即可,真实工作中是不建议自己写的,有很多问题会考虑不周的。关于web容器网上也有很多例子,可以借鉴了解一下。祝你学习愉快。
java如何实现进程间的通信?
客户端与客户端不能直接通信吧,客户端需要与服务器端建立tcp链接。所以两个客户端需要通过服务器连接,你可以建立两个客户端到服务器的长链接,通过服务器转发一个客户端对另一个客户端的信息。
websocket这方面比较方便,非常适合用于聊天室的开发。还可以根据原始邮件的方式,客户端1将信息发给服务器并且存储到一个数据库中,等到客户端2链接服务器时,服务器判断数据库中是否有信息,有的话推送给客户端2,这种方式是非及时通信的。
websocket是即时通信的应用层协议,传输层其实就是tcp长链接。
服务器与服务器之间如何连接和传输数据?
常用的服务和服务之间,服务器和服务器之间的数据传输主要是通过TCP或UDP进行传输。而http、socket、https、ssl、ssh等是建立在TCP的基础上进行传输,即是那些协议的底层实现。
和你举一个连接的流程:
比如你进行一个正常的网络请求,请求链接是 ,那么你的链接会先经过域名服务器进行解释将IP地址返回来,然后客户端通过IP去连接服务器,服务器响应后回传数据。
tcp
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP是因特网中的传输层协议,使用三次握手协议建立连接。
udp
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
udp在网络质量令人十分不满意的环境下,协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
结论
即服务器之间通过上面说的传输协议进行最底层的数据连接及传输,在两台服务器之间进行传输的数据,必须要先序列化之后才能传输。而一些建立在底层连接协议上的上层应用就会进行用户鉴权等行为,如果通过则进行数据回复,如果不通过则切断连接。
-----------------------------------
本人现处广州从事互联网工作多年,资深技术人员、管理人员。愿结识有互联网业务的技术人员或企业人员。