如何与子进程进行通信:

我有一个启动 C/Lua 进程的 Go 程序。现在我想在这两者之间进行通信。例如,在子进程(C/Lua 进程)运行中间,我想要求父进程(Go 程序)进行一些计算并等待结果。我不想使用 stdin/stdout 进行通信,因为这已经用于常规输出。现在我考虑使用套接字进行通信,但我不想重复造轮子。

  • 这种通信的明显选择是什么?
  • 有没有在 Lua 和 Go 之间传递对象的(更或多或少)简单标准方式?如果没有,文本块就足够了。
  • 协议缓冲适用于此吗?看起来有点大材小用,但我在这方面没有经验。
点赞
用户1239701
用户1239701

除了你提到的所有常规的 IPC 方法(是的,使用 protobuf 的 Unix socket 和 stdin/stdout也行),如果你在程序中嵌入了 C/Lua 代码而不是作为进程启动它,你实际上可以直接在这两种语言之间通信。

使用 cgo 模块,Go 代码可以调用 C 函数,嵌入的 C 代码也可以调用 Go 函数。请参见:http://golang.org/cmd/cgo/#hdr-C_references_to_Go

另外,你可以尝试使用一些可嵌入的 Lua 绑定库来实现调用 Lua 代码和让你的 Lua 代码调用 Go。请参见 https://github.com/aarzilli/goluahttps://github.com/stevedonovan/luar/

2014-03-10 08:46:41
用户317915
用户317915

现在我通过常规的 TCP 套接字与子进程通信。子进程(Lua)内置了 luasocket,并且在 Windows、Mac 和 Linux 上都没有问题。

此外,我已经(暂时)定义了自己非常简单的协议,前几步看起来不错。

以防有人感兴趣:https://github.com/speedata/publisher/commit/ea253382c1096274bca2d4124867c39cd0d512e5 和子提交实现了 TCP 连接。

2014-08-15 14:22:10