大家好,又见面了,我是你们的朋友全栈君。
第一部分 Java分布式通讯的方式
1.基于消息方式实现系统间通讯
a.数据传输部分 : TCP/IP 、UDP/IP TCP(端口号为23)与UDP(端口号为53)的区别
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
- TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP首部开销20字节;UDP的首部开销小,只有8个字节
- TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
总结:
- TCP的优势在于其安全性
- UDP的优势在于其性能
b.数据处理部分:BIO、NIO、AIO 同步阻塞BIO: 连接线程 (缓存、自己处理) 同步非阻塞NIO:请求线程(立即、自己处理) 异步非阻塞AIO:有效请求线程(立即、委托OS)
同步 vs 异步 同步:JAVA自己处理IO读写 异步: 将IO读写委托给OS(系统)
阻塞 (不立即返回) vs 非阻塞(立即返回) 阻塞:利用缓冲区先读写资源 ,再通知应用 相对而言响应速度慢 非阻塞: 线程在处理之前可能要等待后端资源, 响应速度快
总结:
- NIO和AIO都是由事件驱动,要进行事件注册及扫描。
- BIO的实现方式主要是通过Socket套接字的方式。
- mysql数据库采用的就是BIO,而Netty采用的是NIO。
2基于远程调用方式实现系统间通讯
- RPC:采用C/S方式,跨语言跨平台
- webservice:请求应答机制,跨系统跨平台
- RMI: 降低客户端与服务器的耦合性,java远程接口调用;跨虚拟机
- JMS:JAVA消息服务,点对点和发布订阅模型 如ActiveMQ
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133335.html原文链接:https://javaforall.cn