简单的匿名管道 - 您使用啥包装器模型? (WinAPI, C++)

Posted

技术标签:

【中文标题】简单的匿名管道 - 您使用啥包装器模型? (WinAPI, C++)【英文标题】:Simple anonymous pipes - what wrapper model you use? (WinAPI, C++)简单的匿名管道 - 您使用什么包装器模型? (WinAPI, C++) 【发布时间】:2008-12-07 19:31:07 【问题描述】:

我在 Windows 中有两个正在运行的进程,每个进程都有一个连接到另一个进程的管道。

我想序列化一个复杂的类并将其从一个进程传输到另一个进程。我已经制定了序列化程序,并且我知道管道正在发送二进制流。我应该如何发送我的序列化数据?我正在使用 WinAPI 和 C++。

我应该开发自定义协议吗?如果是这样,它应该是这个特定类的通用还是唯一的?发送序列化类时可以保留虚拟表吗?

在这种情况下是否有常用的模型或设计模式?一些示例代码将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

这是boost::serialization 的教程。我可以想象它可以很好地通过管道发送数据并在另一端反序列化:http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/tutorial.html

【讨论】:

【参考方案2】:

您可能想查看protocol buffer。

【讨论】:

【参考方案3】:

您可以使用 boost::asio::windows::stream_handle 来像 io 一样组织 iostream,并异步进行。

【讨论】:

【参考方案4】:

您不必担心 vtables,因为 boost serialize 会担心类型。您唯一需要做的就是确保任何类型都是序列化的,然后在反序列化时使用另一侧的 EXACT SAME TYPE

【讨论】:

所以没有一些“通用”模型\协议...比如说,几个不同的类?

以上是关于简单的匿名管道 - 您使用啥包装器模型? (WinAPI, C++)的主要内容,如果未能解决你的问题,请参考以下文章

Win32 匿名管道在第一次读取后损坏

将 keras 集成到 sklearn 管道中的问题

装饰器、包装器和适配器模式之间有啥区别?

在命名管道上选择

win32是啥意思?

如何设计一个简单的 GLSL 包装器以供着色器使用