进程间通信(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)
分布式计算编程基础---云计算笔记DAY4

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 设立等待多长时间返回异常(通常不设置)