分布式Java应用之网络通信(1)

页面导航:首页 > 软件编程 > Java编程 > 分布式Java应用之网络通信(1)

分布式Java应用之网络通信(1)

来源: 作者: 时间:2016-01-21 09:39 【

导读网络通信包含两部分:网络协议和IO。协议规范了数据传输的格式,IO才是真正斤西瓜数据传输的部分。网络协议包括:TCP IP,UDP IP和Multicast(多播协议)IO包括:同步IO(NIO BIO)和异

导读

网络通信包含两部分:网络协议和IO。协议规范了数据传输的格式,IO才是真正斤西瓜数据传输的部分。
网络协议包括:TCP/IP,UDP/IP和Multicast(多播协议)
IO包括:同步IO(NIO/BIO)和异步IO(AIO)

上边的部分都是作为Java分布式应用的基础,目前用于系统间通信的可以大致分为两类:基于消息方式实现系统间的通信、远程调用方式的系统间通用。

基于消息方式实现系统间的通信就是使用基本的jdk类库来操作IO来实现系统间的通信,而远程调用方式的实现我们可以通过目前主流框架和系统提供的服务。

基于消息方式实现系统间的通信

1、TCP/IP

TCP/IP是一种可靠的网络数据传输的协议。TCP/IP要求通信双方首先建立连接,之后再进行数据的传输。

TCP/IP三次握手四次挥手图:(详见可参考:http://blog.csdn.net/xlgen157387/article/details/47710473)
这里写图片描述

TCP/IP负责保证数据传输的可靠性,包括数据的可到达、数据到达的顺序等,但由于TCP/IP需要保证连接及数据传输的可靠,因此可能会牺牲一些性能。<喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPs/gudjRp8+wo7o8YnIgLz4NClRDUNWzsPy0psDto7podHRwOi8vd3d3LmNuYmxvZ3MuY29tL3NtYXJrL3AvMzI4NDc1Ni5odG1sPGJyIC8+DQpUQ1DTtcj7u/rWxqO6aHR0cDovL3d3dy5jbmJsb2dzLmNvbS9obnJhaW5sbC9hcmNoaXZlLzIwMTEvMTEvMjkvMjI2NzUzNC5odG1sPC9wPg0KPHA+PHN0cm9uZz4yoaJVRFAvSVA8L3N0cm9uZz48L3A+DQo8cD5VRFAvSVDKx9K71tayu7Gj1qTK/b7d0ru2qLW9tO+1xM34wufK/b7dtKvK5NCt0umho1VEUC9JULKisrvWsb3TuPjNqNDFtcTLq7e9vajBosGsvdOjrLb4yse3osvNtb3N+MLnyc+9+NDQtKu13aGj08nT2lVEUC9JULK7vajBosGsvdOjrLKix9Kyu8TcsaPWpMr9vt20q8rktcS/yb+/o6zS8rTL0NTE3MnPse3P1s/gttS9z7rDo6y1q7/JxNy74bP2z9bK/b7dtqrKp9LUvLDK/b7dwtLQ8rXEz9bP86Gj0vK0y1VEULOj08PT2rTzzsS8/rbUvqvIt7bI0qrH87K7uN+1xMr9vt2hozwvcD4NCjxwPjxzdHJvbmc+M6GizayyvUlPus3S7LK9SU88L3N0cm9uZz48L3A+DQo8cD5UQ1AvSVC6zVVEUC9JUL/J08PT2s3qs8nK/b7dtcS0q8rko6zKx9K71tbK/b7dtKvK5LXE0K3S6bnmt7ajrLWr0qrN6rPJz7XNs7zkzajQxaOsu7nQ6NKqttTK/b7dvfjQ0LSmwO2ho8D9yOe2wcihus3QtMjryv2+3b/Jt9bOqjxzdHJvbmc+zayyvUlPus3S7LK9SU88L3N0cm9uZz7BvdbWo6zG5NbQzayyvUlP1tDX7rOj08O1xMrHQklPo6hCbG9ja2luZyBJT6Opus1OSU+jqE5vbi1CbG9ja2luZyBJT6Opo6zS7LK9SU/Kx0FJTzwvcD4NCjxwPqOoMaOpQklPo6jX6Mj7xKPKvaOpvs3Kx7Wxt6LG8ElPtcS2wbvy0LSy2df3yrGjrL75zqrX6Mj7t73KvaOsPHN0cm9uZz7Wu9PQtbGzzNDytsG1vcHLwfe78r2rwffQtMjrstnX98+1zbO686OsssW74crNt8XXytS0oaM8L3N0cm9uZz48L3A+DQo8cD6jqDKjqU5JT6Oot8fX6Mj7xKPKvaOpyse7+dPaysK8/sf9tq/LvM/rtcSjrLTTs8zQ8r3Htsi2+NHUo6y1sbeixvBJT7XEtsG78tC0stnX98qxo6zKx7fH1+jI+7XEo7s8YnIgLz4NCjxzdHJvbmc+tbFTb2NrZXTT0MH3v8m2wbvyv8nQtMjrU29ja2V0yrGjrLLZ1/fPtc2zu+HP4NOmtdjNqNaq06bTw7PM0PK9+NDQtKbA7aOs06bTw9TZvavB97bByKG1vbu6s+XH+Lvy0LTI67LZ1/fPtc2zoaM8L3N0cm9uZz621NPazfjC50lPtvjR1KOs1vfSqtPQway9072owaKhosH3tsHIobywwffQtMjryP3W1srCvP6jrExpbnV4IMTausuw5rG+1NoyLjbS1LrztcSw5rG+ssnTw2O3vcq9wLTKtc/WTklPoaM8L3A+DQo8cD6jqDOjqUFJT6Oot8fX6Mj7o6nOqtLssr1JT7e9yr2jrM2s0fm7+dPaysK8/sf9tq/LvM/roaO007PM0PK9x7bItvjR1KOsus1OSU+yu82so6w8c3Ryb25nPrWxvfjQ0LbB0LSy2df3yrGjrNa70OvWsb3TtffTw0FQSbXEcmVhZLvyd3JpdGW3vbeovLS/yTwvc3Ryb25nPqOsQUlPus1OSU+++c6q0uyyvbXEoaM8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;"> a)对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序; b)对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。

较之NIO而言,AIO一方面简化了程序的编写,流的读取和写入都由操作系统来代替完成;另一方面省去了NIO中程序要遍历事件通知队列(Selector)的代价。Windows基于IOCP实现了AIO,Linux目前只有基于epoll模拟实现的AIO

4、消息方式的分类

基于消息方式实现系统间的通信可以分为最简单的使用jdk提供的API来实现TCP/UDP,最常用的为Socket等,另外还有一些开源框架Mina等可以实现。

基于远程调用方式实现系统间的通信

对TCP/IP和UDP/IP均支持,在网络IO的操作上,Java 7以前的版本仅支持BIO和NIO两种方式,对AIO方式的支持是在7以后的版本。

当之间要通信时,可通过调用本地的一个Java接口的方法,透明地调用远程的Java实现。具体的细节则由Java或框架来完成,这种方式在Java中主要用来实现基于RMI和WebService的应用。
另外还有很多的开源框架,例如Dubbo(http://dubbo.io/)和Dubbox(Dubbo的衍生版本:http://www.oschina.net/p/dubbox)都可以实现系统间的通信。

 

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<