2009-11-17 3 views
17

Ci sono motivi per preferire pipe denominate su socket per IPC locale (entrambi con win-api), efficacia-wize, resource-wize o altro, poiché entrambi si comportano in modo molto simile (e probabilmente sono astratti da un'interfaccia simile comunque), in un'applicazione che probabilmente utilizza già socket per scopi di rete comunque?Socket vs named pipe per IPC locale su Windows?

Posso almeno nominare il problema di indirizzamento: numeri di porta per prese contro nomi di file per pipe. Inoltre, named pipe (AFAIK) non avviserà il firewall (finestra di dialogo di blocco/sblocco), sebbene le applicazioni bloccate possano ancora comunicare tramite socket localmente. Qualcos'altro da prendere in considerazione?

In caso di utilizzo di socket, ci sono impostazioni/flag di winsock che sono consigliati quando si utilizzano i socket localmente?

risposta

15

alcune sottili differenze:

prese di corrente non funziona per IPC locale se non si dispone di un adattatore di funzionamento. Quanto è comune avere un PC senza un adattatore funzionante? Bene, sono stato morso quando qualcuno ha provato a dimostrare il nostro software a un cliente su un laptop che non era collegato a una rete oa un alimentatore (quindi il SO disabilitava la scheda di rete per risparmiare energia) e l'adattatore wireless era disabilitato (perché l'utente del laptop non ha usato il wireless). È possibile aggirare questo installando un adattatore loopback ma non è l'ideale.

Il software firewall può causare problemi con la creazione di connessioni TCP/IP. Non dovrebbe essere un problema per l'IPC locale, ma non ne sono convinto. Named pipes can have firewalls too.

È possibile che si verifichino problemi dovuti ai privilegi necessari per creare pipe denominate o per creare nuove istanze di pipe denominate. Ad esempio, stavo eseguendo più server usando la stessa named pipe (probabilmente non era una buona idea, ma questo era per il test) e alcuni fallivano in CreateNamedPipe perché il primo server per creare la pipe era in esecuzione in modalità Amministratore (perché era stato lanciato da Visual Studio in modalità Amministratore) mentre il resto è stato avviato dalla riga di comando con livello UAC normale.

Sebbene l'articolo menzionato da Rubens riguardi principalmente IPC su una rete, rende il punto che "i pipe denominati locali vengono eseguiti in modalità kernel ed è estremamente veloce".

+7

I PC Windows hanno sempre un'interfaccia di loopback virtuale installata. Non è necessario disporre di una scheda di rete o di un driver nel PC per utilizzare i socket di Windows. Utilizzare l'indirizzo IP 127.0.0.1 per indirizzare i processi locali. – phord

4

Un'altra soluzione da prendere in considerazione è un'area di memoria condivisa denominata. È un po 'di lavoro perché devi stabilire tu stesso un protocollo di controllo del flusso, ma l'ho usato con successo in passato, dove la velocità era la cosa più importante.