如何:与子进程通信

时间:2014-03-10 07:27:57

标签: lua go ipc

我有一个启动C / Lua进程的Go程序。现在我想在这两者之间进行沟通。例如,在孩子的运行过程中(c / lua过程),我想让父母(Go程序)做一些计算并等待结果。我并不热衷于使用stdin / stdout进行通信,因为这已经用于常规输出。现在我正在考虑使用套接字进行通信,但我不想重新发明轮子。

  • 这种沟通有哪些明显的选择?
  • 是否有(或多或少)简单的标准方法在Lua和Go之间传递对象?如果没有,文本blob就足够了。
  • Protocol Buffers适合这个吗?看起来有点矫枉过正,但我​​没有经验。

2 个答案:

答案 0 :(得分:3)

除了你提到的所有常用的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/

答案 1 :(得分:0)

我现在通过常规tcp套接字与子进程通信。子进程(Lua)内置了luasocket,这似乎可以在Windows,Mac和Linux上运行而没有问题。

另外,我(现在)定义了我自己非常简单的协议,在第一步看起来没问题。

以防任何人感兴趣:https://github.com/speedata/publisher/commit/ea253382c1096274bca2d4124867c39cd0d512e5并且子提交实现tcp连接。