2017-04-20 1 views
0

Je vais mettre en œuvre le schéma suivant: ZMQ-proxyEst-il possible d'utiliser un proxy ZMQ comme "switch"?

Juste pour tous les « générateurs de données » publier des données sur tous les « récepteurs de données ». Les récepteurs de données devraient toujours avoir la capacité de définir des sous-positions.

// Proxy 
package main 

import zmq "github.com/pebbe/zmq4" 

func main() { 
    publisher, _ := zmq.NewSocket(zmq.XPUB) 
    defer publisher.Close() 
    publisher.Bind("tcp://*:8080") 

    subscriber, _ := zmq.NewSocket(zmq.XSUB) 
    defer subscriber.Close() 
    subscriber.Bind("tcp://*:8081") 

    zmq.Proxy(subscriber, publisher, nil) 
} 

Et "générateurs de données":

// Data generator 
package main 

import (
    zmq "github.com/pebbe/zmq4" 
    "time" 
) 

func main() { 
    publisher, _ := zmq.NewSocket(zmq.PUB) 
    defer publisher.Close() 
    publisher.Connect("tcp://127.0.0.1:8081") 

    for { 
     publisher.Send("Some msg", 0) 
     time.Sleep(time.Second) 
    } 
} 

Et "récepteurs de données":

// Data receiver 
package main 

import (
    "fmt" 
    zmq "github.com/pebbe/zmq4" 
) 

func main() { 
    subscriber, _ := zmq.NewSocket(zmq.SUB) 
    defer subscriber.Close() 
    subscriber.Connect("tcp://127.0.0.1:8080") 

    for { 
     msg, _ := subscriber.Recv(0) 
     fmt.Println(msg) 
    } 
} 

Il me semble que cela devrait fonctionner, mais ce n'est pas. Qu'est-ce que je fais mal?

+0

Dans le moniteur de socket de Proxy, je vois les messages EVENT_ACCEPTED et EVENT_DISCONNECTED. –

Répondre

1

Pour recevoir des données, la prise d'abonné doit indiquer SetSubscibe avec un filtre. voir Official documentation