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