2013-03-13 12 views
12

ottengo il seguente messaggio di errore, quando provo l'esempio router traino con python su Windows (Windows 8):zeromq supporta IPC come canale di trasporto su Windows?

Traceback (most recent call last): 
    File "router.py", line 43, in <module> 
    client.bind("ipc://routing.ipc") 
    File "socket.pyx", line 432, in zmq.core.socket.Socket.bind (zmq\core\socket.c:3870) 
    File "checkrc.pxd", line 23, in zmq.core.checkrc._check_rc (zmq\core\socket.c:5712) 
zmq.error.ZMQError: Protocol not supported 

quindi suppongo che il canale di trasporto IPC per zeromq non è suported su Windows (almeno Windows 8). È vero?

+2

Il problema è che i metodi IPC nativi di Windows non supportano la notifica degli eventi, pertanto non possono essere integrati con un reattore. –

+2

@ Steve-o: le pipe denominate Windows supportano l'I/O asincrono e attivano le notifiche di completamento sulle porte di I/O di completamento (IOCP). Si integrano perfettamente con un framework proactor (o reattore). L'implementazione ZeroMQ per Windows utilizza probabilmente l'API socket BSD (-ish) e piuttosto che l'utilizzo di un IOCP, il che sarebbe una spiegazione migliore del motivo per cui ZeroMQ non supporta il trasporto IPC su Windows. –

risposta

13

La domanda How to use Zeromq's inproc and ipc transports? indica che IPC si basa su pipe denominate POSIX, che Windows non supporta.

Dovresti essere in grado di utilizzare TCP su un'interfaccia Loopback senza problemi.

+0

Infatti, la domanda diventa, perché dovresti usare IPC anziché TCP per qualcosa? Secondo [questo] (http://stackoverflow.com/a/10875272/178757), il TCP tra i processi localhost è comunque veloce quanto IPC! – Jez

11

Non è supportato su Windows, ma TCP su localhost offre le stesse prestazioni di IPC, su Linux e OS/X e lo userei solo su Windows.