去进程间通信

我正在写一个负载平衡的服务器系统。

负载均衡服务器将与多个应用程序服务器进行通信并处理请求。 这些服务器既可以在同一台机器上运行,也可以在networking上运行。

我已经想出了networking,但现在我需要find一个负载均衡器与本地应用程序服务器进行通信的最佳方式。 使用localhostnetworking似乎远非最佳。

我试图通过shmgetshmat系统调用共享内存,但没有find任何工作示例,并且syscall包也完全没有logging。

有人能给我提供一个如何使用这些调用或在Go上工作的一个现实的替代scheme来做IPC的例子吗?

Go有一个内置的RPC系统( http://golang.org/pkg/rpc/ ),可以方便Go进程之间的通信。

另一个select是通过networking连接发送gob编码数据( http://blog.golang.org/2011/03/gobs-of-data.html )。

如果没有基准testing,您不应该放弃本地networking。 例如,Chrome为IPC使用命名pipe道,并在进程之间传输大量数据(例如渲染的位图):

我们主要的进程间通信原语是命名pipe道。 在Linux和OS X上,我们使用socketpair()

http://www.chromium.org/developers/design-documents/inter-process-communication

如果命名pipe道足够好,那么对于你的用例来说,它们可能已经足够了。 另外,如果你写得很好,你可以开始使用命名pipe道(因为它很容易),然后如果你发现命名pipe道的性能不够好(共享内存不容易,不pipe语言如何),切换到共享内存。

我build议看看0mq 。 这是一个消息库,无论您是通过networking,本地IPC甚至是线程间通信使用它,都可以实现快速而简单的操作。 它处理了IPC的许多棘手的问题,例如,如果接收器过载,消息成帧并在发生故障后重新连接,发件人就不能发送请求。 而且它还有许多语言的绑定,包括Go,这使得将用不同语言编写的系统连接起来非常有用。