将大字节流缓冲区发送到另一个进程

Posted

技术标签:

【中文标题】将大字节流缓冲区发送到另一个进程【英文标题】:Sending large byte stream buffer to another process 【发布时间】:2012-11-30 17:18:28 【问题描述】:

假设两个进程都作为 Windows 服务运行,那么将字节流从一个 Windows 进程发送到另一个进程的最佳方式是什么?数据由图像缓冲区组成。每个服务都在同一子网的单独服务器上运行。

接收缓冲区的第二个服务是否应该是 Web 服务(而不是 Windows 服务),即使它永远不会在网站上(仅在内部)被调用?

RPC 是在两个 Windows 服务之间传递数据的最佳方法吗?会传递大量数据,性能是关键。

开发语言为 C# 4.0

【问题讨论】:

【参考方案1】:

我建议使用套接字。 RPC 对套接字的开销很小,除非发送结构化数据,否则不值得付出努力。

【讨论】:

【参考方案2】:

如果性能是关键,则使用共享内存段。在 MSDN 上查找 CreateFileMappingMapViewOfFile。您可以从 http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx 上的“创建命名共享内存”开始。

【讨论】:

好吧,如果您打算使用内存映射文件,那么您不妨使用公开该功能的 .net 框架类。但是如何同步?这是最不方便且最容易出错的 IPC 机制之一。但是把所有这些都放在一边,这个问题解释了这两个进程在不同的机器上运行。所以MMF一点都不好。 糟糕——我完全错过了“不同的机器”这一点!

以上是关于将大字节流缓冲区发送到另一个进程的主要内容,如果未能解决你的问题,请参考以下文章

TCP协议面试热点(面向字节流,粘包问题,TCP异常情况)

Java字节流之ByteArrayInputStream

4-10:TCP协议之面向字节流和粘包问题

Java学习笔记6.1.3 字节流 - 字节流缓冲区与缓冲字节流

Java学习笔记6.1.3 字节流 - 字节流缓冲区与缓冲字节流

字符流和字节流的区别