Update cgo-libzmq/README.md

This commit is contained in:
2025-01-22 10:36:17 +00:00
parent 460d6a9633
commit 8dd091ed8f

View File

@@ -82,4 +82,94 @@ func main(){
fmt.Printf("Received World %d\n", request_nbr)
}
}
```
# multipart
```go
package main
/*
#cgo pkg-config: libzmq
#include <zmq.h>
#include <string.h>
#include <stdlib.h>
*/
import "C"
import (
"fmt"
"unsafe"
"time"
)
func sender(context unsafe.Pointer) {
socket, _ := C.zmq_socket(context, C.ZMQ_PUSH)
defer C.zmq_close(socket)
C.zmq_connect(socket, C.CString("tcp://localhost:5555"))
// Sending a multi-part message
var message C.zmq_msg_t
// First part
C.zmq_msg_init_size(&message, C.size_t(5))
C.memcpy(C.zmq_msg_data(&message), unsafe.Pointer(C.CString("Hello")), C.size_t(5))
C.zmq_msg_send(&message, socket, C.ZMQ_SNDMORE)
C.zmq_msg_close(&message)
// Second part
C.zmq_msg_init_size(&message, C.size_t(6))
C.memcpy(C.zmq_msg_data(&message), unsafe.Pointer(C.CString("World!")), C.size_t(6))
C.zmq_msg_send(&message, socket, C.ZMQ_SNDMORE)
C.zmq_msg_close(&message)
// Last part
C.zmq_msg_init_size(&message, C.size_t(3))
C.memcpy(C.zmq_msg_data(&message), unsafe.Pointer(C.CString("End")), C.size_t(3))
C.zmq_msg_send(&message, socket, 0)
C.zmq_msg_close(&message)
}
func receiver(context unsafe.Pointer) {
socket, _ := C.zmq_socket(context, C.ZMQ_PULL)
defer C.zmq_close(socket)
C.zmq_bind(socket, C.CString("tcp://*:5555"))
for {
var message C.zmq_msg_t
C.zmq_msg_init(&message)
more := C.int(1)
moreSize := C.size_t(unsafe.Sizeof(more))
part := 0
for more != 0 {
C.zmq_msg_recv(&message, socket, 0)
size := C.zmq_msg_size(&message)
data := C.GoBytes(C.zmq_msg_data(&message), C.int(size))
part++
fmt.Printf("Received part %d: %s\n", part, string(data))
C.zmq_getsockopt(socket, C.ZMQ_RCVMORE, unsafe.Pointer(&more), &moreSize)
C.zmq_msg_close(&message)
if more != 0 {
C.zmq_msg_init(&message)
}
}
fmt.Println("End of multipart message\n")
}
}
func main() {
context, _ := C.zmq_ctx_new()
defer C.zmq_ctx_destroy(context)
go sender(context)
time.Sleep(time.Second) // Give some time for the sender to connect
receiver(context)
}
```