(Nota del desarrollador principal, lamentablemente ya no tengo demasiado tiempo para dedicar a esta biblioteca, ¿tal vez es hora de pasar el mantenimiento a alguien más motivado?)
IXWebSocket es una biblioteca C ++ para el desarrollo del cliente y servidor de WebSocket. Tiene dependencias mínimas (sin impulso), es muy simple de usar y admite todo lo que probablemente necesitará para WebSocket Dev (SSL, compresión de desinflado, se compila en la mayoría de las plataformas, etc.). HTTP Cliente y código de servidor también está disponible, pero no ha recibido tantas pruebas.
Se ha utilizado en grandes títulos de videojuegos móviles que envían y reciben toneladas de mensajes desde 2017 (iOS y Android). Fue probado en macOS, iOS, Linux, Android, Windows y FreeBSD. Dos objetivos de diseño importantes son la simplicidad y la corrección.
/*
* 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 ;
}¿Interesado? ¡Ve a leer los documentos! Si las cosas no funcionan como se esperaba, cree un problema en GitHub, o incluso mejor una solicitud de extracción si sabe cómo solucionar su problema.
Se está desarrollando activamente IXWebSocket, consulte el ChangeLog para saber qué está cocinando. Si está buscando un servicio de mensajería en tiempo real (el 'servidor' de chat con el que hablará su código WebSocket) con muchas características, como la historia, respaldada por Redis, mire a Cobra.
El código del cliente IXWebSocket es un cumplimiento de Autobahn comenzando con la versión 6.0.0. Vea los resultados de la prueba actual. Algunas pruebas todavía están fallando en el código del servidor.
Comenzando con la versión 11.0.8, IXWebSocket debe ser completamente compatible con C ++ 11.
Si su empresa o proyecto está utilizando esta biblioteca, no dude en abrir un problema o PR para enmendar esta lista.
Hay muchas bibliotecas de WebSocket excelentes que podrían funcionar para usted. Aquí hay un par de serios.
UVWeb es una biblioteca escrita por el autor IXWebSocket que está construido sobre UVW, que es un envoltorio C ++ para Libuv. Tiene más dependencias y no admite SSL en este punto, pero se puede usar para abrir múltiples conexiones dentro de un solo hilo del sistema operativo gracias a Libuv.
Para verificar el rendimiento de una biblioteca WebSocket, puede ver el proyecto AutoRoute.
| Sistema operativo | TLS | Desinfectante | Estado |
|---|---|---|---|
| Linux | Openssl | Ninguno | |
| macosa | Transporte seguro | Desinfectante de hilos | |
| macosa | Openssl | Desinfectante de hilos | |
| macosa | Mbedtls | Desinfectante de hilos | |
| Windows | Desactivado | Ninguno | |
| UWP | Desactivado | Ninguno | |
| Linux | Openssl | Desinfectante de dirección |