24、Windows API 进程间通信,其他进程间通信方式

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 1、动态数据交换(DDE)和网络动态数据交换(NDDE)[1,2] DDE可能是最为强大的进程间通信方式,实现也非常复杂。通信的两端分为服务端与客户端,两端都需要具有窗口。 一个DDE的通信过程大致如下: DDE会话由客户端发起,先初始化一个会话。

1、动态数据交换(DDE)和网络动态数据交换(NDDE)[1,2]<?xml:namespace prefix = o />

DDE可能是最为强大的进程间通信方式,实现也非常复杂。通信的两端分为服务端与客户端,两端都需要具有窗口。

一个DDE的通信过程大致如下:

DDE会话由客户端发起,先初始化一个会话。DDE客户端会向服务端发送一个WM_DDE_INITIATE窗口消息。服务窗口收到此消息后,根据条件判断是否需要响应此消息,如果服务端确定可以与客户端建立会话,那么会返回WM_DDE_ACK消息。如果客户端成功收到了服务端发送的WM_DDE_ACK窗口消息,那么会话就已经建立,之后就进行数据的传输。

数据传输分为很多种方式,可以只传输一个单独的数据项,也可以再建立一个永久数据连接( Permanent Data Link)

如果进行独立数据项传输,数据传输的单位是数据项。客户端使用WM_DDE_REQUESTWM_DDE_POKE消息向服务端接收和发送数据项。数据的传输使用WM_DDE_DATA消息。

而永久数据连接的建立也是通过客户端发起,客户端向服务端发送WM_DDE_ADVISE消息,服务端根据情况做出回应,根据是否能够建立连接而返回不同的WM_DDE_ACK消息。终止数据连接使用消息WM_DDE_UNADVISE

客户端还可以使用WM_DDE_EXECUTE请服务端发送命令。

终止一个DDE会话使用WM_DDE_TERMINATE消息。

几乎所有的过程都是由客户端发起请求,而服务端响应,服务端响应的方向大多是发送一个WM_DDE_ACK消息。

DDE的通信需要操作系统ATOM表的帮助,用于索引数据。操作ATOM表有专门的API

2、通过File Mapping在进程间共享数据[3]

    共享文件是一种高效的进程间通信方式,因为直接共享内存,所以访问速度非常快。而且允许大量数据传输。

    共享内存的进程间通信与其他进程间通信方式相比,限制条件要少。比如邮槽对数据大小和数据流向有限制,管道只能采用半双工通信形式等,剪贴板容易受其他进程影响等。

使用File Mapping共享数据也有缺点。最大的缺点是无法实现实时性,一个进程无论是写入还是读出数据后,另一个进程都不知道对方的操作是否已经完成。因此在要求实时数据传输时,File Mapping通常与其他进程通信方式配合使用,用于传输大量的数据。

3Windows Socket

    利用Windows Socket实现的进程间通信借用了Socket通信的原理。其实任何可以在两台主机间进行网络数据通信的机制都可以用于进程间通信。

    如果在一台主机上既使用Socket服务端又实现Socket客户端,那么客户端在连接服务端时将IP指定为本机,就可以实现同一主机上的Socket服务端进程和Socket客户端进程间的通信。

    使用Socket进行进程间通信既可以实现实时性,又可以传输大数据量信息,且数据传输的速度也很快,因此应用范围很广泛。

    在进程间实现Socket通信的原理和程序实现方法与实现不同主机间的Socket通信没有区别。

参考

[1] 精通Windows API 函数、接口、编程实例

[2] http://msdn.microsoft.com/en-us/library/ms648711%28VS.85%29.aspx

[3] http://www.cnblogs.com/mydomain/archive/2011/01/07/1929874.html

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4天前
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
2月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
186 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
5月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
131 9
|
5月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
74 1
|
6月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
7月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
7月前
|
Windows
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
7月前
|
JavaScript Windows
NodeJs——如何获取Windows电脑指定应用进程信息
NodeJs——如何获取Windows电脑指定应用进程信息
173 0
|
7月前
|
Linux Windows
Windows查找监听端口对应的进程及其路径
Windows查找监听端口对应的进程及其路径
162 0
|
8月前
|
安全 API Python
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。