(メイン開発者からの注意事項は、残念ながら、このライブラリに専念する時間があまりありません。おそらく、他の誰かにメンテナンスを渡す時が来たのでしょうか?)
IxWebsocketは、WebSocketクライアントとサーバー開発用のC ++ライブラリです。最小限の依存関係があり(ブーストなし)、WebSocket DEV(SSL、DEFLate Platsion、コンパイルなど)に必要なものすべてを使用してサポートできます。 HTTPクライアントとサーバーコードも利用できますが、それほど多くのテストを受けていません。
2017年以降、大量のメッセージを送信および受信する大きなモバイルビデオゲームのタイトルで使用されています(iOSとAndroid)。 MacOS、iOS、Linux、Android、Windows、FreeBSDでテストされました。 2つの重要な設計目標は、シンプルさと正確さです。
/*
* 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は積極的に開発されています。何が調理されているのかを知るために、Changelogをチェックしてください。 Redisに裏打ちされた履歴などの多くの機能を使用して、リアルタイムメッセージングサービス(WebSocketコードが通信するチャットのような「サーバー」)を探している場合は、Cobraを見てください。
ixwebsocketクライアントコードは、6.0.0バージョンから始まるAutobahnに準拠しています。現在のテスト結果を参照してください。サーバーコードでは、一部のテストはまだ失敗しています。
11.0.8リリースから始めて、ixwebsocketは完全にC ++ 11に互換性がなければなりません。
会社またはプロジェクトがこのライブラリを使用している場合は、このリストを修正するために問題またはPRを自由に開いてください。
そこにはたくさんの素晴らしいWebsocketライブラリがありますが、それはあなたのために働くかもしれません。ここにいくつかの深刻なものがあります。
UVWebは、LibuvのC ++ラッパーであるUVWの上に構築されたIxWebsocket Authorによって書かれたライブラリです。この時点ではより多くの依存関係があり、SSLをサポートしていませんが、Libuvのおかげで1つのOSスレッド内で複数の接続を開くために使用できます。
Websocketライブラリのパフォーマンスを確認するには、Autorouteプロジェクトを確認できます。
| OS | TLS | 消毒剤 | 状態 |
|---|---|---|---|
| Linux | openssl | なし | |
| macos | 安全な輸送 | スレッド消毒剤 | |
| macos | openssl | スレッド消毒剤 | |
| macos | mbedtls | スレッド消毒剤 | |
| Windows | 無効 | なし | |
| UWP | 無効 | なし | |
| Linux | openssl | 住所消毒剤 |