2012-07-29 6 views
6

esempi di Socket.io tutti seguono questo schemamodo più efficace per definire Socket.io su ("messaggio") gestori

io.sockets.on("connection", function(mySocket){ 
    mySocket.on("my message", function(myData){ 
     ... 
    }); 
}); 

Mi sembra che questo avrebbe creato una nuova funzione di callback per ogni connessione. Supponendo che ogni presa risponde al messaggio nello stesso modo, non sarebbe più efficiente della memoria per definire il gestore una volta per tutte le prese come questa:

function myMessageHandler(data){ 
    ... 
} 

io.sockets.on("connection", function(mySocket){ 
    mySocket.on("my message", myMessageHandler); 
}); 

o anche questo:

io.sockets.on("my message", function(mySocket, myData){ 
    ... 
}); 

Se è così, perché Socket.io consiglia una pratica che spreca memoria? Ci aspettiamo di voler mantenere variabili stateful per il socket all'interno della chiusura della callback "connessione"?

+2

Sei impegnato in quella forma inutile di preoccupazione nota come "ottimizzazione prematura". Se la differenza nel sovraccarico fa o rompe l'applicazione, node.js è la scelta sbagliata della piattaforma. – ebohlman

+0

La mia logica applicativa viene eseguita su dozzine di messaggi socket e serve migliaia di connessioni simultanee. Se ogni connessione duplica migliaia di righe di callback, ciò mi sembra una grande supervisione dell'ottimizzazione – arkanciscan

risposta

0

Guardandolo da un'altra prospettiva, la prima è di facile lettura (perché molti dettagli vengono lasciati fuori). Penso che questo modulo mostri meglio come funziona la biblioteca. Stile simile è utilizzato sul sito Web Node stesso per la stessa ragione, credo. E penso che sia proprio il motivo per cui è usato in quei posti.

Dopo pochi minuti la lettura di blog e discussioni suggerisce che gli sviluppatori di solito optano per il passaggio di funzioni con nome. Anche se sono sicuro che c'è un guadagno in termini di prestazioni, la motivazione principale è senza dubbio la leggibilità. Penso che troverai il secondo modulo (o una forma più elaborata) per essere più semplice da utilizzare man mano che le tue funzioni crescono.

Problemi correlati