进程间通信(interprocess communication,IPC)
概念:互相独立进程间通信及共同协作以完成某项任务的能力
进程:程序运行时的表示
(分布式计算的核心技术)
分布式计算中,两个或多个进程按约定的某种协议进行IPC。
协议:数据通信各参与进程必须遵守的一组规则。
分类:单播通信(unicast)和组播通信(multicast)
- IPC设施
(1) 系统级IPC设施包括消息队列,共享内存等
作用:可开发各种网络软件或分布式计算系统
缺点:开发分布式应用往往工作量大且复杂
解决:抽象成高层IPC API(能更好的把注意力集中在应用逻辑上)
API(Application Programming Interface):应用编程接口或应用程序接口
- IPC API四种基本操作
(1)发送(Send):由发送进程发起,向接收进程传输数据。允许发送进程识别接收发送进程和定义待传数据。
(2)接收(Receive):接收进程发起,接收发送进程发来的数据。允许接收进程识别发送进程和定义保存数据的内存空间,该内存随后被接受者访问
(3)连接(Connect):对面向连接的IPC,必须有允许在发起进程和指定进程间建立逻辑连击的操作:一个进程发出请求连接,另一个进程发出接受连接
(4)断开连接(Disconnect):对面向连接的IPC,允许通信双方关闭先前建立起来的某一逻辑连接。
Socket编程
平台:
在BSD,Linux等基于Unix的系统中,Socket API是操作系统的一部分。
在个人操作系统如MS-DOS,Windows NT,Mac-OS,OS/2中,以程序库形式提供的
(windows系统中,称Winsocket)
使用:
JAVA语言将Socket API作为语言核心类的一部分提供给了用户
现状:
Socket API是实现进程间通信的第一种编程设施
(1)Socket API已成为IPC编程事实上的标准,高层IPC设施基于Socket API实现
(2)对于响应时间要求较高或在有限资源平台上运行的应用最合适
理解:
socket API就像进程接口的集合,是进程通信的“窗口”
据两种主要传输层协议分:
UDP—数据包Socket(Datagram Socket)
TCP—流式Socket(Stream Socket)
JAVA流式Socket API
- 两类:
(1)ServerSocket:连接socket,用于接收连接
(2)Socket:数据socket,用于数据交换 - 程序流:
(server端):
创建一个连接Socket,并监听请求
等待连接
创建一个数据socket去读写socket流获取输入流到socket
从流中读数据,
获取输出流去写
/
关闭数据socket
关闭连接socket
(客户端):
创建数据socket并请求连接
获取输出流去写到socket
写到流中获取输入流读到socket
从流中读关闭数据socket
- 方法及函数
(ServerSocket)
方法 | 说明 |
---|---|
ServerSocket(int port) | 为特定端口创建连接socket |
Socket accept() throws IOException | 等待连接,在连接建立后停止 |
public void close() throws IOException | 关闭socket |
void setTimeeout(int timeout) throws SocketException | 设立等待多长时间返回异常(通常不设置) |
(Socket)
方法 | 说明 |
---|---|
Socket(Inetaddress address,int port) | 创建流式socket,连接特定地址,特定端口 |
void close() throws IOException | 关闭socket |
InputStream getInputStream() throws IOException | 返回输入流使数据能被从socket中读 |
outputStream getOutputStream() throws IOException | 返回输出流使数据能被写入socket |
void setTimeeout(int timeout) throws SocketException | 设立等待多长时间返回异常(通常不设置) |
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分布式计算编程基础—云计算笔记DAY4 - Python技术站