2013-03-13 7 views
12

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, das Router Beispiel wiht Python unter Windows (Windows 8):Unterstützt zeromq IPC als Transportkanal unter 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 

So nehme ich an, dass der IPC-Transportkanal für zeromq nicht unter Windows (ab Windows suported ist 8). Ist das wahr?

+2

Das Problem ist, dass Windows native IPC-Methoden keine Ereignisbenachrichtigung unterstützen und daher nicht in einen Reaktor integriert werden können. –

+2

@ Steve-o: Windows Named Pipes unterstützen asynchrone E/A und triggern Beendigungsbenachrichtigungen an I/O Completion Ports (IOCP). Sie lassen sich gut in ein Proactor- (oder Reaktor-) Framework integrieren. Die ZeroMQ-Implementierung für Windows verwendet wahrscheinlich die BSD (-ish) -Socket-API und verwendet keine IOCP, was eine bessere Erklärung dafür wäre, warum ZeroMQ den IPC-Transport unter Windows nicht unterstützt. –

Antwort

13

Die Frage How to use Zeromq's inproc and ipc transports? erwähnt, dass IPC auf POSIX Named Pipes angewiesen ist, die Windows nicht unterstützt.

Sie sollten TCP stattdessen problemlos auf einer Loopback-Schnittstelle verwenden können.

+0

In der Tat - die Frage wird, warum würden Sie jemals IPC anstelle von TCP für irgendetwas verwenden? Laut [this] (http://stackoverflow.com/a/10875272/178757) ist TCP zwischen localhost-Prozessen sowieso so schnell wie IPC! – Jez

11

Es wird nicht unter Windows unterstützt, aber TCP über localhost bietet die gleiche Leistung wie IPC, unter Linux und OS/X, und ich würde das auch unter Windows verwenden.