2016-08-02 5 views
1

Gibt es eine Möglichkeit, die Daten zu manipulieren, die socket.io sendet, bevor sie gesendet/empfangen werden? Ich dachte über etwas wie eine Express-Middleware nach.
So könnte ich Daten nach dem normalen .emit() Methode aufgerufen werden und bevor socket.on (...) aufgerufen wird.BISON Middleware für socket.io codieren/decodieren?

Expressgut Ich würde es sich vorstellen, etwas zu schauen, wie dies zu BISON dekodieren alle eingehenden Anfrage:

app.use(function(req, res, next) { 
    req.body = BISON.decode(req.body); 
    next(); 
}); 

Nun, wie das in einer Art und Weise mit socket.io getan werden könnte, die auch automatisch verschlüsselt geschickt bekommen ersucht werden ?

Ich weiß, dass socket.io Middle in ähnlicher Form unterstützt auszudrücken, aber das ist nur für die tatsächliche HTTP-Anforderung, die Socket.io die WebSocket-Verbindung erstellen sendet ...

io.use(function(socket, next) { 
    //... 
    next(); 
}); 

so I Zweifel, dass dies hier eine Hilfe sein würde ..

Antwort

1

Sie abfangen können (und ändern) Daten für packet Ereignisse zu hören, und in ähnlicher Weise das flush Ereignis verwendet ausgehende Nachrichten abfangen:

io.use(function(socket, next) { 
    socket.conn.on('packet', function(packet) { 
    ...change `packet.data` here... 
    }); 
    socket.conn.on('flush', function(packets) { // array of packets 
    ... 
    }); 
    next(); 
}); 

Aber um ehrlich zu sein, ich bin auf eine harte Zeit, Dokumentation zu finden, wie packet.data codiert ist, so kann ich ein vollständiges Beispiel nicht zur Verfügung stellen.

EDIT: socket.io-parser hat decodeString() die verwendet wird, um die Nutzlast zu parsen. Leider wird es nicht exportiert (und die Methoden sind exportiert sind alle Async, die nicht gut mit Event-Handlern kombinieren).

+0

Sehr interessant. Also muss ich es eigentlich abzweigen oder irgendwie diese bestimmte Funktion herausziehen. Hm ... Es fühlt sich irgendwie hacky an. Sind Sie sicher, dass es keinen anderen Weg gibt, dies zu tun? – Forivin

+0

Ich stimme es fühlt sich hacky, aber ich habe nicht in der Lage gewesen, eine Alternative zu finden (die dort nicht bedeutet, ist nicht vorhanden, natürlich :-) – robertklep

+0

Dies scheint nicht btw für die Client-Seite zu arbeiten. Irgendeine Idee dafür? – Forivin