WINDOWS API 进程间通信,管道(PIPE),Remoting技术

    在.NET 直接支持的Remoting技术有IPChannel,TCPChannel,HTTPChannel。

     在跨广域网的应用里,推荐使用WCF技术,基于HTTPCHANNEL,而在进程中通讯中,反而IPCChannel更见优秀,但是不能跨局域网。

     IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能。但如果客户端和服务端不在同一台机器时,我们不能注册IPCChannel。

     简单的应用程序应该中,基于.NET应用程序作用域为基础的IPCChannel,速度非常的快,然而在WEB应用应用中,我认为TCPCHANNEL反而表现会更改好,最好试试,不可以教条。

      当然还有基于WINDOWS API 的管道技术。在C#里面对应的就是IPC模式,他的底层就是管道。需要自己实现命名管道的实现。

以下是来自互联网,了解其缺陷:

http://www.cnblogs.com/mydomain/archive/2011/01/10/1931914.html

21、WINDOWS API 进程间通信,管道(PIPE)

    管道是一种用于在进程间共享数据的机制,其实质是一段共享内存。Windows系统为这段共享的内存设计采用数据流I/0的方式来访问。由一个进程读、另一个进程写,类似于一个管道两端,因此这种进程间的通信方式称作“管道”。

    管道分为匿名管道和命名管道。

    匿名管道只能在父子进程间进行通信,不能在网络间通信,而且数据传输是单向的,只能一端写,另一端读。

    命令管道可以在任意进程间通信,通信是双向的,任意一端都可读可写,但是在同一时间只能有一端读、一端写。

一、注意点

1、常用API

Pipes[2]

[3,4]中也对这一部分进行了介绍。

2、示例

1)服务器端

创建管道 >> 监听 >> 读写 >> 关闭

CreateNamedPipe

ConnectNamedPipe

ReadFile/WriteFile

DisconnectNamedPipe

示例代码

通过pipe进程间通信-服务器端

2)客户端

打开命令管道,获得句柄 >> 写入数据 >> 等待回复

WaitNamedPipe

SetNamedPipeHandleState

示例代码

通过pipe进程间通信-客户端

3I/O简介

    I/O模式不仅在进程间通信时使用,任何具有数据流形式的输入输出(包括文件输入输出、内核通信、网络输入输出等)都涉及I/O模式。

    异步( Asynchronous)和同步(Synchronous) I/O是两种基本的I/O模式

同步I/O

所谓同步I/O是指在调用ReadFileWriteFile等函数进行输入输出操作时,系统完成了输入输出ReadFileWriteFile才返回。在操作系统进行I/O操作的过程上,用户态线程不能执行,因此在同步I/O时,如果需要在I/O时进行其他操作就只能再开启线程。

异步I/O

    异步I/O是在调用ReadFileWriteFile等函数后,函数立即返回,线程可以进行其他操作。剩下的I/O操作在系统内核中自动完成。那么在系统内核完成输入输出后,程序如何知道I/O是否已完成?

    一种方法,称作完成函数(Completion Routines),如果使用ReadFileExWriteFileEx等进行I/O,可以指定完成函数,所谓完成函数是指内核在完成I/O后,内核会回调这个函数。当完成函数被调用时,就指明内核已经完成了I/O,程序可以在这个函数中进行一个I/O完成后需要的操作(例如释放内存)


================================================================

可见需要封装WINDOWS API。这个某位国际上的高手封装的C#类库。

http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx

在一般的应用上,没有要求话,我建议采用IpcChannel就行了。扩展容易比较原生,可以直接升级扩展成HttpChannel,方案我认为最好。


速度比较:

ipcChanel>tcpChannel>HttpChannel

穿透能力:

HttpChannel>tcpChannel>IpcChannel。


自己权衡即可。


关于IPC信道本质上是微软针对管道的二次封装。

在.NET里面,将IPC最终使用

private const string prefix = @"\\.\pipe\";
替换修改为新的名称重新采用WIN 32进行发送。

暂时就是直到这些,以后再研究研究可能不对,需要积累。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值