Pourquoi ne pas zeromq travail sur localhost?
Ce code fonctionne très bien:
import zmq, json, time
def main():
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.bind("ipc://test")
subscriber.setsockopt(zmq.SUBSCRIBE, '')
while True:
print subscriber.recv()
def main():
context = zmq.Context()
publisher = context.socket(zmq.PUB)
publisher.connect("ipc://test")
while True:
publisher.send( "hello world" )
time.sleep( 1 )
Mais ce code n'est pas* travail:
import zmq, json, time
def recv():
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.bind("tcp://localhost:5555")
subscriber.setsockopt(zmq.SUBSCRIBE, '')
while True:
print subscriber.recv()
def send():
context = zmq.Context()
publisher = context.socket(zmq.PUB)
publisher.connect("tcp://localhost:5555")
while True:
publisher.send( "hello world" )
time.sleep( 1 )
Il génère cette erreur:
ZMQError: rien de tel
Pourquoi, pouvez pas zeromq utiliser localhost interfaces?
T-il seulement de la CIB sur la même machine?
Vous devez vous connecter pour publier un commentaire.
Le problème est à la ligne:
essayez de changer:
Comme @fdb souligne:
Le problème est à la ligne:
essayez de changer:
Toutefois cela mérite plus d'explications pour comprendre pourquoi.
La documentation pour zmq_bind explique (en gras c'est moi qui souligne):
Depuis votre exemple utilise tcp comme protocole de transport nous regardons dans la zmq_tcp de la documentation pour découvrir (encore une fois, c'est moi qui souligne en gras):
Donc, si vous n'êtes pas à l'aide de wild-card ou le nom de l'interface, cela signifie que vous devez utiliser une adresse IPv4 sous forme numérique (pas de nom de DNS).
Noter que cela ne s'applique à l'utilisation de
zmq_bind
! D'autre part, il est parfaitement acceptable d'utiliser un nom DNS aveczmq_connect
comme discuté plus tard dans les docs pour zmq_tcp: