2012-03-03 3 views
5

У меня есть собственная реализация сокета, которая поддерживает соединение с обычным клиентом tcp. Теперь я хотел бы добавить поддержку websocket в свою серверную программу. В этом случае мне нужно будет поддерживать протоколы квитирования и сообщения, которые поддерживаются основными веб-браузерами. Я смог обработать рукопожатие, но застрял в обращении с кадрированием и без кадрирования сообщений. Существует ли существующая библиотека C или C++, которая обрабатывает кодирование и декодирование фреймов сообщений websocket и поддерживает основные протоколы websocket, используемые основными веб-браузерами?Библиотека C или C++ для кодирования и декодирования рамок websocket

Большая часть текущей реализации, которую я нашел (то есть libwebsocket, websocketpp и т. Д.), Реализует собственную серверную и клиентскую библиотеку, а это значит, что мне нужно использовать их реализацию сокетов. Я не хочу этого делать, потому что это потребует от меня изменить много вещей в моей текущей программе, и это не вариант для меня. Мне нужна простая библиотека, которая обрабатывает кодирование и декодирование рамок websocket (и/или также обрабатывает часть подтверждения, но это не является обязательным).

+1

как портировать с [phpws] (http://code.google.com/p/phpws/source/browse/phpws/websocket.framing.php)? код выглядит довольно просто. – Chikei

ответ

5

Библиотека websocketpp хорошо разработана, а классы обработки кадров не смешиваются с сокетными. Существует зависимость от библиотек BOOST и STL. STL не является проблемой, и зависимость BOOST довольно легко избежать. Просто начните с файла websocket_frame.hpp ветви политики-рефактора.

6

Websocketpp библиотека автор здесь.

Код обработки кадра и код обработки рукопожатия полностью отделены от кода сокета/сети. Посмотрите папку с процессорами в ветке политик-рефактор. Существует один для проекта 76 (hybi_legacy) и один для RFC6455 (hybi/hybi_header). Процессоры кадра считывают из потока STL, который вы можете заполнить через свой собственный сетевой код или из другого источника.

Пришлите мне письмо на github, если у вас есть более конкретные вопросы.

+5

Задайте больше вопросов здесь, используя комментарии, вместо этого другие люди также могут узнать об этом. –

Смежные вопросы