2012-03-03 32 views
5

Ho un'implementazione socket personale che supporta la connessione dal client tcp regolare. Ora vorrei aggiungere il supporto websocket nel mio programma server. In tal caso, avrò bisogno di supportare i protocolli di handshaking e di framing dei messaggi supportati dai principali browser web. Sono stato in grado di gestire la parte di handshaking, ma ero bloccato nell'affrontare l'inquadratura e la non-framing dei messaggi. Esiste una libreria C o C++ esistente che gestisce la codifica e la decodifica dei telegrammi Websocket e supporta i principali protocolli Websocket utilizzati dai principali browser Web?Libreria C o C++ per codifica e decodifica di frame Websocket

La maggior parte dell'attuale implementazione che ho trovato (ad esempio libwebsocket, websocketpp, ecc.) Implementa la propria libreria client e server, il che significa che è necessario utilizzare l'implementazione del socket. Non voglio farlo perché questo mi richiederà di modificare molte cose nel mio programma attuale, e non è un'opzione per me. Quello di cui ho bisogno è solo una semplice libreria che gestisce la codifica e la decodifica dei frame websocket (e/o gestisce anche la parte di handshaking, ma non è obbligatoria).

+1

come fare il porting da [phpws] (http://code.google.com/p/phpws/source/browse/phpws/websocket.framing.php)? il codice sembra piuttosto semplice. – Chikei

risposta

5

La libreria websocketpp è progettata in modo piacevole e le classi di gestione dei frame non sono miste a quelle socket. Esiste una dipendenza dalle librerie BOOST e STL. STL non è un problema e la dipendenza BOOST è abbastanza facile da evitare. È sufficiente iniziare dal file websocket_frame.hpp del ramo responsabile dei criteri.

6

Autore libreria Websocketpp qui.

Il codice di elaborazione frame e handshake è completamente separato dal codice socket/network. Guarda la cartella dei processori del ramo del policy-refactor. Ce n'è uno per draft 76 (hybi_legacy) e uno per RFC6455 (hybi/hybi_header). I processori frame leggono da un flusso STL che è possibile compilare tramite il proprio codice di rete o da un'altra fonte.

Inviami un PM su github se hai domande più specifiche.

+5

Chiedi altre domande qui, usando i commenti, invece così anche altre persone possono imparare da esso. –