2012-11-22 13 views
7

A mio parere, IOLib e usocket hanno quasi lo stesso livello di astrazione. IOLib utilizza socket di back-end del sistema operativo, d'altra parte usocket utilizza il socket back-end Lisp-runtime.IOLib vs usocket

Mi chiedo quale sia la scelta migliore per casi d'uso particolari.

Ad esempio, un server che ha bisogno di grande concorrenza, o un client che si concentra sulla portabilità, ecc

+1

Penso che tu abbia appena risposto alla tua domanda con il tuo ultimo paragrafo. Puoi anche rimuoverlo dalla domanda, postarla come risposta e accettarla (sì, puoi accettare le tue risposte). – acelent

risposta

4

Penso che this blogpost risponda alla tua domanda.

Per riassumere, se si sta scrivendo una libreria, che dovrebbe funzionare su tutte le piattaforme e le implementazioni (con una ragionevole definizione di "tutti"), utilizzare usocket. Per altri casi d'uso sulla piattaforma Unix, IOLib è probabilmente più versatile. Ad esempio, supporta socket di dominio Unix e IO non bloccanti.

A proposito, ho eseguito il porting di cl-redis da usocket a IOLib e viceversa: l'API è molto simile, anche se leggermente diversa.

1

Se il vostro obiettivo principale è la portabilità, usockets a quanto pare è la scelta migliore, dal momento che, come è indicato sulla this pagina:

USOCKET è una porta di rete portabilità per socket stile BSD.

2

Il codice per USOCKET è molto più piccolo e più semplice di IOLib comprese le dipendenze. IOLib utilizza i collegamenti CFFI per le funzionalità di Linux che non sono presenti in alcuni * BSD ad esempio.

A parità di altre condizioni, il codice sorgente minimo è sempre preferibile perché significa meno bug, perché è più facile da capire e modificare. Il codice più semplice è più veloce per eseguire il debug e distribuire più facilmente.

Oltre a ciò, entrambi sembrano funzionare all'incirca allo stesso modo: entrambi forniscono kqueue/select per gestire più connessioni all'interno di un singolo thread. Non sono sicuro delle funzioni più avanzate, come il passaggio di un descrittore di file unix in un socket.

direi che se vi piace solo Linux, andare con IOLib o USOCKET, se si target altri sistemi operativi commerciali di Linux e/o * BSD, o, o piace Keep It Simple & stupido, andare con USOCKET.