gpt4 book ai didi

tcp - 不同 Goroutine 中的 ZeroMQ 上下文如何通信?

转载 作者:IT王子 更新时间:2023-10-29 00:43:05 30 4
gpt4 key购买 nike

我正在使用 this as boilerplate , 除了在同一个程序中我还有一些 goroutines 作为工作人员并连接到后端端点 tcp://127.0.0.1:5560。

我想做的是让它通过更有效的方式连接,例如 ipc://、inproc://,甚至是 unix 套接字。我试过那些,但没有用。 Channels 是 ZeroMQ 的禁忌,对吗?

那么如何在没有 tcp 的情况下将不同的 goroutines 连接到 ZeroMQ 上下文?有更好的选择吗?

更新:代码:

// Simple message queuing broker
// Same as request-reply broker but using QUEUE device
//
// Author: Brendan Mc.
// Requires: http://github.com/alecthomas/gozmq

package main

import (
zmq "github.com/alecthomas/gozmq"
)

func startWorker() {
context, _ := zmq.NewContext()
defer context.Close()

worker, _ := context.NewSocket(zmq.REP)
//err := worker.Connect("ipc:///backend") // Tried it, but nothing
//err := worker.Connect("inproc:///backend") // Tried it, but nothing
err := worker.Connect("tcp://127.0.0.1:5560") // this works
if err != nil {
fmt.Println(err)
}

for {
data, err := worker.Recv(0)
fmt.Println(string(data))
worker.Send([]byte("I got your data"), 0)
}
}

func main() {
context, _ := zmq.NewContext()
defer context.Close()

// Socket facing clients
frontend, _ := context.NewSocket(zmq.ROUTER)
defer frontend.Close()
frontend.Bind("tcp://*:5559")

// Socket facing services
backend, _ := context.NewSocket(zmq.DEALER)
defer backend.Close()
//backend.Bind("ipc:///backend") // Tried it, but nothing
//backend.Bind("inproc:///backend") // Tried it, but nothing
backend.Bind("tcp://*:5560") // this works

for i := 0; i < 4; i++ {
go startWorker() // Start workers in a separate goroutine
}

// Start built-in device
zmq.Device(zmq.QUEUE, frontend, backend)

// We never get here…
}

最佳答案

为了使用inproc:// 传输,所有套接字都需要共享相同的上下文(这是线程安全的)。

此外,如果您使用相同的上下文,则不需要 ZMQ 的任何后端 I/O 线程

您没有提到您在哪个操作系统下运行,但是 ipc:// 传输仅在大多数 *nix 下可用。在 Windows 下,您只能使用以下传输方式:tcp://、inproc://、pgm://。查看zmq_connect文档以获取更多信息。

关于tcp - 不同 Goroutine 中的 ZeroMQ 上下文如何通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12820618/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com