Go的口号之一是不要通过共享内存来通信,而是通过通信来共享内存。
我想知道Go是否允许在同一台机器上运行两个不同的Go编译成的二进制文件相互通信(即客户端-服务器),以及与C++中的boost::interprocess相比速度如何?到目前为止,我看到的所有例子都只演示了同一程序中的例程之间的通信。
能否提供一个简单的Go示例(包括独立的客户端和服务器代码)?谢谢!
Go的口号之一是不要通过共享内存来通信,而是通过通信来共享内存。
我想知道Go是否允许在同一台机器上运行两个不同的Go编译成的二进制文件相互通信(即客户端-服务器),以及与C++中的boost::interprocess相比速度如何?到目前为止,我看到的所有例子都只演示了同一程序中的例程之间的通信。
能否提供一个简单的Go示例(包括独立的客户端和服务器代码)?谢谢!
当我看到这篇文章时,我首先想到了Stackless Python。 Go中的通道让我非常想起Stackless Python,但这可能是因为(a)我用过它并且(b)它们实际上来自哪个语言/思想我从未接触过。
我从未尝试使用通道作为IPC,但这可能是因为另一种选择很可能更安全。以下是伪代码:
chan = channel()
ipc = IPCManager(chan, None)
send_to_other_app(ipc.underlying_method)
chan.send("Ahoy!")
chan = channel()
recv_from_other_app(underlying_method)
ipc = IPCManager(chan, underlying_method)
ahoy = chan.recv()
Rob表示,他们正在深入思考如何使通道作为网络透明的RPC工作,目前这还没有实现,但显然他们想花时间把它做好。
与此同时,您可以使用gob包,虽然不是完美无缝的解决方案,但已经运行得相当不错了。
func SendHandler(comm Comm){
// Look for sends to a process
for {
i := <-comm.To;
comm.Send(i,dest);
}
}
func ReceiveHandler(comm Comm){
// Look for recieves from a process
// Ping the handler to read out
for {
_ = <-comm.From;
i := comm.Recv(source);
comm.From <- i;
}
}
在这里,comm.Send 和 comm.Recv 包装了一个 C 通信库。但我不确定如何为两个不同的程序建立通道,我没有经验处理这种情况。