(從主要開發人員那裡註意,可悲的是,我沒有太多時間去這個圖書館,也許是時候將維護將維護轉交給其他更有動力的人了嗎?)
IxWebSocket是一個用於WebSocket客戶端和服務器開發的C ++庫。它具有最小的依賴關係(無提升),非常易於使用,並且支持WebSocket Dev(SSL,Deflate Compression,在大多數平台上編譯等)所需的所有內容。 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正在積極開發,請查看ChangElog,以了解正在做飯。如果您正在尋找實時消息服務(將與Websocket代碼交談的類似聊天的“服務器”),例如REDIS支持的History等功能,請查看Cobra。
IxWebsocket客戶端代碼從6.0.0版本開始。請參閱當前的測試結果。在服務器代碼中,一些測試仍在失敗。
從11.0.8版本開始,IxWebsocket應完全C ++ 11兼容。
如果您的公司或項目正在使用此庫,請隨時打開問題或PR修改此列表。
那裡有很多很棒的Websocket庫,可能對您有用。這是幾個嚴肅的。
UVWeb是由IxWebsocket作者撰寫的庫,該圖書館是在UVW頂部建造的,該庫是Libuv的C ++包裝器。它具有更多的依賴項,並且此時不支持SSL,但是由於Libuv,它可以用來在單個操作系統線程中打開多個連接。
要檢查Websocket庫的性能,您可以查看自動路線項目。
| 作業系統 | TLS | 消毒劑 | 地位 |
|---|---|---|---|
| Linux | Openssl | 沒有任何 | |
| macos | 安全運輸 | 線程消毒劑 | |
| macos | Openssl | 線程消毒劑 | |
| macos | mbedtls | 線程消毒劑 | |
| 視窗 | 禁用 | 沒有任何 | |
| UWP | 禁用 | 沒有任何 | |
| Linux | Openssl | 地址消毒劑 |