例如,如果我想用C#编写一个使用匿名管道与用另一种语言编写的程序通信的守护进程程序,这既可能也可行吗?
我之所以这样问,是因为我打算用一种能够交叉编译到多个目标(Haxe)的语言来编写代码。我打算编写一个应用程序,它可以动态编译代码,运行它,并在一段时间内与它进行通信,其他目标的编译速度要快于C# (例如,任何脚本语言),我可以轻松地用Haxe编写与平台无关的客户端代码,但是这在C#中使用AnonymousPipeServerStream是可行的吗?
我看到客户端句柄只是一个strIng,这个字符串是干什么用的?如何使用它初始化AnonymousPipeClientStream,我是否可以在客户机程序中创建一个跨平台抽象,以类似的方式从.NET服务器应用程序初始化和使用客户机句柄?
大多数语言都支持子处理,方法是运行shell命令,并为程序的stdin、stdout和stderr流返回带有句柄的对象。例如,这是初始化AnonymousPipeServerStream的先决条件,底层程序只是用管道句柄做一些事情,大概这比使用System.Diagnostics.Process.Stdin/Stdout
更有性能吗?
这和匿名管道有什么不同?
发布于 2020-03-13 11:56:38
根据进一步的研究,简短的回答(对主要问题)是肯定的。
第二个问题的答案取决于语言,例如哈希林克确实使用匿名管道作为子进程。
发布于 2021-08-05 23:27:10
如果目标是在c#程序和其他程序之间进行通信,我建议使用某种消息传递库,而不是管道。
问题是管道不处理消息,只处理字节。因此,您可能需要在管道上实现您自己的协议,并为您想要针对的每种语言再次实现该协议。
以ZeroMq作为消息队列的示例。它有相当多的语言绑定已经可用,我怀疑至少有一些消息传递框架支持管道传输。但是,还有许多其他库/协议可供选择。
您可能还想考虑序列化,使用一个好的序列化库来管理它要容易得多,我想大多数语言都支持最常见的格式,比如json。
https://softwareengineering.stackexchange.com/questions/404892
复制