Add cgo-libzmq/README.md
This commit is contained in:
85
cgo-libzmq/README.md
Normal file
85
cgo-libzmq/README.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# server.go
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
/*
|
||||||
|
#cgo pkg-config: libzmq
|
||||||
|
#include <zmq.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
// sudo apt-get install libzmq3-dev
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
context := C.zmq_ctx_new()
|
||||||
|
defer C.zmq_ctx_destroy(context)
|
||||||
|
|
||||||
|
responder := C.zmq_socket(context, C.ZMQ_REP)
|
||||||
|
defer C.zmq_close(responder)
|
||||||
|
|
||||||
|
rc := C.zmq_bind(responder, C.CString("tcp://*:5555"))
|
||||||
|
if rc != 0 {
|
||||||
|
panic("Failed to bind socket")
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
buffer := make([]byte, 10)
|
||||||
|
C.zmq_recv(responder, unsafe.Pointer(&buffer[0]), 10, 0)
|
||||||
|
fmt.Println("Received Hello")
|
||||||
|
C.sleep(1)
|
||||||
|
message := unsafe.Pointer(C.CString("World"))
|
||||||
|
defer C.free(message)
|
||||||
|
C.zmq_send(responder, message, 5, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# client.go
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
/*
|
||||||
|
#cgo pkg-config: libzmq
|
||||||
|
#include <zmq.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main(){
|
||||||
|
fmt.Println("Connecting to hello world server…")
|
||||||
|
|
||||||
|
context := C.zmq_ctx_new()
|
||||||
|
defer C.zmq_ctx_destroy(context)
|
||||||
|
|
||||||
|
requester := C.zmq_socket(context, C.ZMQ_REQ)
|
||||||
|
defer C.zmq_close(requester)
|
||||||
|
|
||||||
|
C.zmq_connect(requester, C.CString("tcp://localhost:5555"))
|
||||||
|
|
||||||
|
// for request_nbr := range 10 {
|
||||||
|
|
||||||
|
for request_nbr := 0; request_nbr < 10; request_nbr++ {
|
||||||
|
buffer := make([]byte, 10)
|
||||||
|
fmt.Printf("Sending Hello %d...\n", request_nbr)
|
||||||
|
msg := unsafe.Pointer(C.CString("Hello"))
|
||||||
|
defer C.free(msg)
|
||||||
|
C.zmq_send(requester, msg, 5, 0);
|
||||||
|
C.zmq_recv(requester, unsafe.Pointer(&buffer[0]), 10, 0);
|
||||||
|
fmt.Printf("Received World %d\n", request_nbr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user