A golang interface to CZMQ
git clone [email protected]:jedisct1/libsodium.git
cd libsodium
./autogen.sh; ./configure; make; make check
sudo make install
sudo ldconfig
git clone [email protected]:zeromq/libzmq.git
cd libzmq
./autogen.sh; ./configure --with-libsodium; make; make check
sudo make install
sudo ldconfig
git clone [email protected]:zeromq/czmq.git
cd czmq
./autogen.sh; ./configure; make; make check
sudo make install
sudo ldconfig
go get github.com/zeromq/goczmq
package main
import (
"time"
"github.com/zeromq/goczmq"
)
func main() {
payload := []byte("Hello")
payload_size := len(payload)
count := 1000000
pullSock, err := goczmq.NewPull("inproc://test")
if err != nil {
panic(err)
}
defer pullSock.Destroy()
go func() {
pushSock, err := goczmq.NewPush("inproc://test")
if err != nil {
panic(err)
}
defer pushSock.Destroy()
for i := 0; i < count; i++ {
err = pushSock.SendFrame([]byte("Hello"), 0)
if err != nil {
panic(err)
}
}
}()
startTime := time.Now()
for i := 0; i < count; i++ {
msg, err := pullSock.RecvMessage()
if err != nil {
panic(err)
}
if string(msg[0]) != "Hello" {
panic("invalid msg!")
}
}
endTime := time.Now()
elapsed := endTime.Sub(startTime)
throughput := float64(count) / elapsed.Seconds()
megabits := float64(throughput*float64(payload_size)*8.0) / 1e6
log.Printf("message size: %d", payload_size)
log.Printf("message count: %d", count)
log.Printf("test time (seconds): %f", elapsed.Seconds())
log.Printf("mean throughput: %f [msg/s]", throughput)
log.Printf("mean throughput: %f [Mb/s]", megabits)
}
- Peter Kleiweg's zmq4 bindings
This project uses the MPL v2 license, see LICENSE