2012-03-03 16 views
5

Mam własną implementację gniazda, która obsługuje połączenie ze zwykłym klientem tcp. Teraz chciałbym dodać obsługę websocket w moim programie serwera. W takim przypadku będę musiał wspierać protokoły uzgadniania i przesyłania komunikatów, które są obsługiwane przez główne przeglądarki internetowe. Byłem w stanie poradzić sobie z częścią uzgadniania, ale utknąłem w radzeniu sobie z kadrowaniem i usuwaniem wiadomości. Czy istnieje istniejąca biblioteka C lub C++, która obsługuje kodowanie i dekodowanie ramek wiadomości websocket i obsługuje główne protokoły websocket używane przez główne przeglądarki internetowe?C lub C++ biblioteka do kodowania i dekodowania ramek websocket

Większość obecnych implementacji, które znalazłem (tj. Libwebsocket, websocketpp itp.) Implementuje własną bibliotekę serwera i klienta, co oznacza, że ​​muszę użyć ich implementacji gniazd. Nie chcę tego robić, ponieważ wymaga to ode mnie modyfikacji wielu rzeczy w moim bieżącym programie i nie jest to opcja dla mnie. Potrzebuję tylko prostej biblioteki, która obsługuje kodowanie i dekodowanie ramek websocket (i/lub obsługuje także część uzgadniania, ale nie jest to obowiązkowe).

+1

co powiesz na przenoszenie danych z [phpws] (http://code.google.com/p/phpws/source/browse/phpws/websocket.framing.php)? kod wygląda dość prosto. – Chikei

Odpowiedz

5

Biblioteka websocketpp jest ładnie zaprojektowana, a klasy obsługi klatek nie są mieszane z klasami gniazd. Istnieje zależność od bibliotek BOOST i STL. STL nie stanowi problemu, a zależność BOOST jest dość łatwa do uniknięcia. Po prostu zacznij od pliku websocket_frame.hpp gałęzi policy-refactor.

6

Autor biblioteki Websocketpp tutaj.

Kod przetwarzania i kod przetwarzania uścisku dłoni są całkowicie oddzielone od kodu gniazda/sieci. Spójrz na folder procesorów gałęzi policy-refactor. Jest jeden dla szkicu 76 (hybi_legacy) i jeden dla RFC6455 (hybi/hybi_header). Procesory ramek odczytują ze strumienia STL, który można wypełnić za pomocą własnego kodu sieciowego lub z innego źródła.

Wyślij mi PM na Github, jeśli masz jakieś bardziej szczegółowe pytania.

+5

Zadaj więcej pytań tutaj, używając komentarzy, aby inni mogli się z tego również nauczyć. –