(Nota do desenvolvedor principal, infelizmente não tenho muito tempo para me dedicar a esta biblioteca, talvez seja hora de passar a manutenção para outra pessoa mais motivada?)
O IXWebSocket é uma biblioteca C ++ para o WebSocket Client e Server Development. Possui dependências mínimas (sem impulso), é muito simples de usar e suportar tudo o que você provavelmente precisará para o WebSocket Dev (SSL, deflatar compactação, compilar na maioria das plataformas, etc ...). O código do cliente e do servidor HTTP também está disponível, mas não recebeu tanto teste.
Ele tem sido usado em grandes títulos de videogames móveis enviando e recebendo toneladas de mensagens desde 2017 (iOS e Android). Foi testado em macOS, iOS, Linux, Android, Windows e FreeBSD. Dois objetivos importantes de design são simplicidade e correção.
/*
* 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 ;
}Interessado? Vá ler os documentos! Se as coisas não funcionarem como esperado, crie um problema no Github, ou melhor ainda, uma solicitação de puxar se você souber como corrigir seu problema.
O IXWebSocket está sendo desenvolvido ativamente, confira o Changelog para saber o que está cozinhando. Se você estiver procurando por um serviço de mensagens em tempo real (o servidor do tipo Chat, seu código Websocket falará) com muitos recursos como o histórico, apoiado por Redis, veja a Cobra.
O código do cliente IXWebSocket é compatível com a Autobahn, começando com a versão 6.0.0. Veja os resultados do teste atual. Alguns testes ainda estão falhando no código do servidor.
Começando com a versão 11.0.8, o IXWebSocket deve ser totalmente C ++ 11 compatível.
Se sua empresa ou projeto estiver usando esta biblioteca, sinta -se à vontade para abrir um problema ou PR para alterar esta lista.
Existem muitas ótimas bibliotecas da WebSocket por aí, que podem funcionar para você. Aqui estão alguns sérios.
O UVWeb é uma biblioteca escrita pelo autor ixwebSocket, construído sobre o UVW, que é um invólucro C ++ para Libuv. Ele possui mais dependências e não suporta SSL neste momento, mas pode ser usado para abrir várias conexões em um único thread do sistema operacional graças ao Libuv.
Para verificar o desempenho de uma biblioteca da WebSocket, você pode ver o projeto Autoorte.
| OS | TLS | Desinfetante | Status |
|---|---|---|---|
| Linux | OpenSSL | Nenhum | |
| macos | Transporte seguro | Desinfetante para threads | |
| macos | OpenSSL | Desinfetante para threads | |
| macos | Mbedtls | Desinfetante para threads | |
| Windows | Desabilitado | Nenhum | |
| Uwp | Desabilitado | Nenhum | |
| Linux | OpenSSL | Endereço de desinfetante |