3.2分布式系统-通信和远程调用

上传人:第*** 文档编号:54464836 上传时间:2018-09-13 格式:PPT 页数:40 大小:1.45MB
返回 下载 相关 举报
3.2分布式系统-通信和远程调用_第1页
第1页 / 共40页
3.2分布式系统-通信和远程调用_第2页
第2页 / 共40页
3.2分布式系统-通信和远程调用_第3页
第3页 / 共40页
3.2分布式系统-通信和远程调用_第4页
第4页 / 共40页
3.2分布式系统-通信和远程调用_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《3.2分布式系统-通信和远程调用》由会员分享,可在线阅读,更多相关《3.2分布式系统-通信和远程调用(40页珍藏版)》请在金锄头文库上搜索。

1、分布协同计算基础,第三章: 分布式系统基础 -进程间通信与远程调用张锡哲 副教授 计算机应用技术研究所 东北大学信息科学与工程学院,1 Internet通信协议 2 外部数据表示和编码 3 分布式对象间通信 4 事件和通知,主要内容,1.Internet协议API,两种通信模式: 同步和异步通信 在通信双方的进程维护着消息队列, 发送进程将消息先放到发送方缓冲区,并通过通信信道到达目的主机的接收的缓冲区,接受进程从缓冲区取出数据。 同步通信:send和receive都是阻塞操作 异步通信: send 操作是非阻塞型的, receive操作有阻塞和非阻塞两种形式 (通过轮询或中断接收通知),什么

2、情况下采用同步通信?,如果下一条指令一定等I/O完成,则必须使用阻塞的方式 在要求CPU占用率较低,以及响应时间较短的情况下,必须使用阻塞方式。 比如在VoIP软件电话中,接收语音数据包的I/O操作就需要使用blocking的方式,因为VoIP应用对I/O操作的时延很敏感。,什么情况下采用异步通信?,如果程序同时处理多个I/O操作,或者除了I/O操作之外,还有其它的工作可做。那么使用非阻塞的方式较好,这样使用的线程数较少。 在高性能的服务器中,由于需要同时响应数目非常大的连接,无法为每一个连接都启动一个线程。这种情况下,也需要使用非阻塞的方式。 例如,在嵌入式应用中,内存的容量十分有限,对线程

3、的数量也有严格要求的场合下,就需要使用非阻塞的方式,让一个线程处理多个IO工作。,进程间通信特征,消息目的地 Internet 地址 + 本地端口 服务名: 由命名服务器在运行时解析 操作系统提供与位置无关的标识符对应底层的端口 可靠性 有效性:消息最终被传递到相应的进程,尽管会有一些丢包现象发生 完整性:到达目的地的消息和发出消息是完全一致的,并且没有重复 有序性 接收消息的顺序和发送的顺序相同,进程间通信的端口 两种通信协议(UDP and TCP )使用socket 抽象 起源于BSD Unix, 在UNIX的大多数版本里出现 绑定到一个局部的端口(最大216 个可用端口) 和一个IP地

4、址 同一台机器上的进程不能共用一个端口号,Socket,UDP 报文通信:无确认、无重发 UDP 报文通信的特点 消息大小:不大于64k,多出的部分被截取 阻塞: non-blocking sends (如果到了接收端的消息找不到对应的端口号,消息将被丢弃); blocking receives(接收需要设置超时,在一段时间收不到消息时作相应的处理) 超时:接收端限制 任意接收:一个socket对发送端没有限制 故障模型 缺失故障:如果发现校验和不正确或和发送双方缓冲区不够,会导致消息的丢失 乱序故障:接收顺序和发送的顺序不一致,UDP报文通信,DatagramPacket 字节数组 消息长度

5、 因特网地址 端口 DatagramSocket send 和receive : 在一对套接字间传递数据报 setSoTimeout : 设置超时 connect: 连接到某个因特网地址和远程端口,UDP 数据报的Java API,例子: UDP客户发送一个消息到服务器并获得一个应答(JAVA API),import .*; import java.io.*; public class UDPClientpublic static void main(String args) / args give message contents and server hostnameDatagramSoc

6、ket aSocket = null;try aSocket = new DatagramSocket(); byte m = args0.getBytes();InetAddress aHost = InetAddress.getByName(args1);int serverPort = 6789; DatagramPacket request = new DatagramPacket(m, args0.length(), aHost, serverPort);aSocket.send(request); byte buffer = new byte1000;DatagramPacket

7、reply = new DatagramPacket(buffer, buffer.length); aSocket.receive(reply);System.out.println(“Reply: “ + new String(reply.getData(); catch (SocketException e)System.out.println(“Socket: “ + e.getMessage();catch (IOException e)System.out.println(“IO: “ + e.getMessage();finally if(aSocket != null) aSo

8、cket.close(); ,TCP协议提供一个字节流的抽象,其中可以写数据和读数据 这种通信模式隐含了以下的网络特征 不考虑消息的尺寸 不考虑消息丢失的问题 流控制 消息的重复和乱序 消息的目的地 与流通信相关的问题 数据项的匹配: 通信双方需要对流上传输的数据内容达成一致 阻塞: 发送操作后被阻塞直到数据到达接收方的缓冲区 接收操作被阻塞直到数据到达缓冲区 线程: 服务器每当收到一个连结的请求,它创建一个线程,TCP流通信,故障模型 TCP协议保证可靠通信所要求的完整性和有效性 连结可能会由于一些未知的故障遭到破坏 无法区分是网络故障还是进程的故障 无法知道最近发出去的消息是否被接收端收到

9、,TCP流通信,TCP客户与服务器建立连接,发送请求并接收应答,import .*; import java.io.*; public class TCPClient public static void main (String args) / arguments supply message and hostname of destinationSocket s = null;tryint serverPort = 7896;s = new Socket(args1, serverPort); DataInputStream in = new DataInputStream( s.getI

10、nputStream();DataOutputStream out = new DataOutputStream( s.getOutputStream();out.writeUTF(args0); / UTF is a string encoding see Sn 4.3String data = in.readUTF(); System.out.println(“Received: “+ data) ; catch (UnknownHostException e)System.out.println(“Sock:“+e.getMessage(); catch (EOFException e)

11、System.out.println(“EOF:“+e.getMessage();catch (IOException e)System.out.println(“IO:“+e.getMessage();finally if(s!=null) try s.close();catch (IOExceptione) System.out.println(“close:“+e.getMessage(); ,为什么需要外部数据表示和编码? 不同计算机上的数据格式不一样 两台计算机如何交换数据? 有一个统一的外部形式 发送时:本地表示转换为外部表示 接收时:外部形式转换本地表示 数据按本地格式发送,并附

12、有格式说明,接收端如果发现和自己的格式不一致,则做相应的转换。 外部数据表示 一个统一的标准,规定数据结构和基本数据的表示形式 编码/解码 用途: 数据传输和保存 三种外部编码方法 CORBAs common data representation / Javas object serialization/XML,2. 外部数据的表示和编码,规定了所有在CORBA远程调用中可能用到的参数和返回值类型的数据的表示格式 15种基础类型 Short (16bit), long(32bit), unsigned short, unsigned long, float, char, 结构化类型 组成每个

13、结构化类型的简单类型值按特定的顺序加到字节序列中。,CORBA的公共数据表示,CORBA CDR 消息,打平的格式表示值为 Smith, London, 1934 的Person 结构,03,47,811,1215,1619,20-23,2427,5,“Smit“,“h_“,6,“Lond“,“on_“,1934,字符序列中的下标,4 字节,注释,字符串长度,Smith,London,unsigned long,Struct Person string name;string place;long year; ;,字符串长度,序列化(解序列化) 将一个对象表示成扁平的形式(flattening

14、)或将对各对象串行化,便于存储和传输 包含对象的类的信息以及版本信息 句柄(Handles): 对象的指针序列化时处理成句柄 每个对象只被编码一次 反射的使用 反射 :实现了根据类名创建类, 以及为给定的类创建具有给定参数类型的构造函数 反射使得以完全通用的方式进行序列化和解序列化成为可能,Java 对象序列化,Java 对象序列化,Public class Person implements Serializable private String name;private String place;private int year;public Person (String aName, S

15、tring aPlace, int aYear)name = aName;place = aPlace;year = aYear;/ followed by methods for accessing the instance variables Person p = new Person(“Smith”, “London”, 1934);,可扩展标记语言XML,以标记串做标签,标记用于描述数据的逻辑结构 可扩展的,能够定义用户自己的标记 文本形式,人人可读, 多媒体技术教程胡晓峰29.00多媒体技术基础林福宗28.00,XML基本语法,XML文件的结构 文件头:是XML的说明部分,描述了XM

16、L文档、版本号、编码信息和其他一些信息:表示本行是处理指令告诉浏览器如何处理此XML文档 xml:说明该文件是XML文件 version= “1.0” : 说明该文件遵循XML1.0规范 encoding=“GB2312“:采用GB2312编码 文件体:存放XML文件的具体信息,以元素形式出现 注释:在之间 XML文档扩展名为.xml,XML基本语法,XML声明 任何一个独立的XML文档必须以声明开始,声明必须使用小写的”XML”以及”version”关键词version属性用于指明文档的版本属性,即文档符合的XML规范 encoding 属性用于指明文档的编码使用的字符集,不指明则以Unicode编码格式进行分析,中文必须指明GB2312,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号