(Обратите внимание на основного разработчика, к сожалению, у меня больше не так много времени, чтобы посвятить этой библиотеке, может быть, пришло время передать обслуживание кому -то еще более мотивированным?)
IxWebSocket - это библиотека C ++ для разработки клиента и сервера WebSocket. Он имеет минимальные зависимости (без повышения), очень прост в использовании и поддержке всего, что вам, вероятно, понадобится для Dev WebSocket (SSL, сжатие дефроза, компилируется на большинстве платформ и т. Д.). Код клиента и сервера HTTP также доступен, но он не получил столько тестирования.
Он использовался в больших названиях мобильных видеоигр, отправляющих и получая тонны сообщений с 2017 года (iOS и Android). Он был протестирован на MacOS, iOS, Linux, Android, Windows и FreeBSD. Две важные цели дизайна - простота и правильность.
/*
* main.cpp
* Author: Benjamin Sergeant
* Copyright (c) 2020 Machine Zone, Inc. All rights reserved.
*
* Super simple standalone example. See ws folder, unittest and doc/usage.md for more.
*
* On macOS
* $ mkdir -p build ; (cd build ; cmake -DUSE_TLS=1 .. ; make -j ; make install)
* $ clang++ --std=c++11 --stdlib=libc++ main.cpp -lixwebsocket -lz -framework Security -framework Foundation
* $ ./a.out
*
* Or use cmake -DBUILD_DEMO=ON option for other platforms
*/
# include < ixwebsocket/IXNetSystem.h >
# include < ixwebsocket/IXWebSocket.h >
# include < ixwebsocket/IXUserAgent.h >
# include < iostream >
int main ()
{
// Required on Windows
ix::initNetSystem ();
// Our websocket object
ix::WebSocket webSocket;
// Connect to a server with encryption
// See https://machinezone.github.io/IXWebSocket/usage/#tls-support-and-configuration
// https://github.com/machinezone/IXWebSocket/issues/386#issuecomment-1105235227 (self signed certificates)
std::string url ( " wss://echo.websocket.org " );
webSocket. setUrl (url);
std::cout << " Connecting to " << url << " ... " << std::endl;
// Setup a callback to be fired (in a background thread, watch out for race conditions !)
// when a message or an event (open, close, error) is received
webSocket. setOnMessageCallback ([]( const ix::WebSocketMessagePtr& msg)
{
if (msg-> type == ix::WebSocketMessageType::Message)
{
std::cout << " received message: " << msg-> str << std::endl;
std::cout << " > " << std::flush;
}
else if (msg-> type == ix::WebSocketMessageType::Open)
{
std::cout << " Connection established " << std::endl;
std::cout << " > " << std::flush;
}
else if (msg-> type == ix::WebSocketMessageType::Error)
{
// Maybe SSL is not configured properly
std::cout << " Connection error: " << msg-> errorInfo . reason << std::endl;
std::cout << " > " << std::flush;
}
}
);
// Now that our callback is setup, we can start our background thread and receive messages
webSocket. start ();
// Send a message to the server (default to TEXT mode)
webSocket. send ( " hello world " );
// Display a prompt
std::cout << " > " << std::flush;
std::string text;
// Read text from the console and send messages in text mode.
// Exit with Ctrl-D on Unix or Ctrl-Z on Windows.
while ( std::getline (std::cin, text))
{
webSocket. send (text);
std::cout << " > " << std::flush;
}
return 0 ;
}Заинтересованы? Прочитайте документы! Если вещи не работают, как и ожидалось, пожалуйста, создайте проблему на GitHub, или, даже лучше, если вы знаете, как решить свою проблему.
IXWEBSOCKET активно разрабатывается, ознакомьтесь с The ChangeLog, чтобы узнать, что готовит. Если вы ищете службу обмена сообщениями в реальном времени (ваш сервер, похожий на чат, ваш код WebSocket будет поговорить) со многими функциями, такими как история, поддержанные Redis, посмотрите на Cobra.
Клиентский код ixwebsocke - это Autobahn, начиная с версии 6.0.0. См. Текущие результаты теста. Некоторые тесты по -прежнему сбои в коде сервера.
Начиная с выпуска 11.0.8, ixwebsocket должен быть полностью C ++ 11.
Если ваша компания или проект используют эту библиотеку, не стесняйтесь открывать проблему или PR, чтобы изменить этот список.
Есть много отличных библиотек WebSocket, которые могут работать для вас. Вот пара серьезных.
UVWEB - это библиотека, написанная автором IXWEBSOCKE, которая построена на вершине UVW, которая является оберткой C ++ для LIBUV. Он имеет больше зависимостей и не поддерживает SSL на данный момент, но его можно использовать для открытия нескольких соединений в одном потоке ОС благодаря Libuv.
Чтобы проверить производительность библиотеки WebSocket, вы можете посмотреть на проект Autoroute.
| ОС | TLS | Дезинфицирующее средство | Статус |
|---|---|---|---|
| Linux | Openssl | Никто | |
| macOS | Безопасный транспорт | Туго дезинфицирующего средства | |
| macOS | Openssl | Туго дезинфицирующего средства | |
| macOS | Mbedtls | Туго дезинфицирующего средства | |
| Окна | Неполноценный | Никто | |
| UWP | Неполноценный | Никто | |
| Linux | Openssl | Адрес дезинфицирующего средства |