我有一个启动C / Lua进程的Go程序。现在我想在这两者之间进行沟通。例如,在孩子的运行过程中(c / lua过程),我想让父母(Go程序)做一些计算并等待结果。我并不热衷于使用stdin / stdout进行通信,因为这已经用于常规输出。现在我正在考虑使用套接字进行通信,但我不想重新发明轮子。
答案 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/golua和https://github.com/stevedonovan/luar/
答案 1 :(得分:0)
我现在通过常规tcp套接字与子进程通信。子进程(Lua)内置了luasocket,这似乎可以在Windows,Mac和Linux上运行而没有问题。
另外,我(现在)定义了我自己非常简单的协议,在第一步看起来没问题。
以防任何人感兴趣:https://github.com/speedata/publisher/commit/ea253382c1096274bca2d4124867c39cd0d512e5并且子提交实现tcp连接。