나는 같은 프로그램에서 직원이면서 백엔드 엔드 포인트 인 tcp : //127.0.0.1 : 5560에 연결하는 일부 goroutines을 가지고 있다는 것을 제외하면 this as boilerplate을 사용하고 있습니다.다른 Goroutines에서 ZeroMQ 컨텍스트간에 통신하는 방법은 무엇입니까?
나는 ipc : //, inproc : // 또는 unix 소켓과 같은보다 효율적인 방법으로 연결하고 싶습니다. 나는 그것들을 시도했으나 효과가 없었다. 채널은 ZeroMQ와 맞습니까?
그래서 tcp없이 다른 goroutine을 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…
}
나는 당신이 무엇을 요구하고 있는지 정말로 모르겠다. 0MQ로 다른 프로토콜을 사용할 수 있는지 알고 싶습니까? 또는 0MQ가 여러 goroutines에서 사용하는 것이 안전한지 묻는 중입니까? –
0mq와 다른 프로토콜을 사용할 수 있는지, goroutines간에 통신하는지 묻습니다. tcp를 통해 goroutines간에 통신 할 수 있지만 inproc 또는 ipc로는 할 수 없습니다. Go의 goroutine에서도 작동합니까? –
zmq와 함께 몇 가지 코드를 게시하면 몇 가지 문제가 발생할 수있는 작은 것들이 있습니다 ... 일반적으로 ZMQ를 사용하면 모든 것이 동일한 프로세스 내에있는 한 당신은'inproc : //'연결을 사용할 수 있어야합니다. 각 goroutine은 동일한 컨텍스트 (컨텍스트는 스레드로부터 안전함)를 '공유'해야하며이 컨텍스트에서 각 inproc : // 연결을 만듭니다. – g19fanatic