| 庫 | 語言標準 | 依賴 | 特點 | 適用場景 |
|---|---|---|---|---|
| Boost.Beast | C++11/14/17/20 | Boost.Asio, Boost.System | 標準化程度最高、無外部依賴、支援 HTTP/WS 統一、Asio 生態 | **現代 C++ 首選**、高性能服務端/客戶端 |
| websocketpp | C++11 | Boost.Asio (可選 standalone) | 純頭文件、RFC 6455 完整實現、支援 TLS、Permessage-Deflate | 輕量嵌入、老專案兼容 |
| uWebSockets.js / uNetworking | C++17 | libuv, OpenSSL | 極致性能 (epoll/kqueue/IOCP)、用戶態協議棧、Node.js 綁定 | 高頻交易、百萬連接網關 |
| cpp-httplib + WS 擴展 | C++11 | 無 (單頭文件) | 極簡、HTTP+WS 一體、適合小專案 | 快速原型、微服務 Sidecar |
| IXWebSocket | C++11 | OpenSSL, zlib (可選) | 跨平台、自動重連、TLS、代理支援 | 桌面/移動客戶端 |
#include
#include
#include
#include
#include
#include
#include
namespace beast = boost::beast;
namespace websocket = beast::websocket;
namespace net = boost::asio;
namespace ssl = net::ssl;
using tcp = net::ip::tcp;
int main() {
try {
// 1. I/O 上下文
net::io_context ioc;
ssl::context ctx(ssl::context::tlsv12_client);
ctx.set_default_verify_paths(); // 信任系統 CA
// 2. 解析目標
tcp::resolver resolver(ioc);
auto const results = resolver.resolve("echo.websocket.org", "443");
// 3. 建立 TLS + WS 流
websocket::stream> ws(ioc, ctx);
// 4. 連接 TCP + TLS 握手
net::connect(ws.next_layer().next_layer(), results);
ws.next_layer().handshake(ssl::stream_base::client);
// 5. WebSocket 握手 (Host + Origin)
ws.set_option(websocket::stream_base::decorator(
[](websocket::request_type& req) {
req.set(beast::http::field::user_agent, "Boost.Beast-WS-Client");
}));
ws.handshake("echo.websocket.org", "/");
// 6. 發送文本幀
std::string msg = "Hello from C++ Boost.Beast!";
ws.write(net::buffer(msg));
std::cout << "Sent: " << msg << std::endl;
// 7. 接收回應
beast::flat_buffer buffer;
ws.read(buffer);
std::cout << "Received: " << beast::make_printable(buffer.data()) << std::endl;
// 8. 關閉連接
ws.close(websocket::close_code::normal);
} catch (std::exception const& e) {
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
return 0;
}
cmake_minimum_required(VERSION 3.15)
project(ws_client LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(Boost 1.70 REQUIRED COMPONENTS system ssl)
find_package(OpenSSL REQUIRED)
add_executable(ws_client main.cpp)
target_link_libraries(ws_client PRIVATE Boost::system Boost::ssl OpenSSL::SSL OpenSSL::Crypto)
Java 端用 **Spring WebSocket (STOMP over WS)** 或 **Netty/WebSocket** 均遵循 RFC 6455,**只需確保**:
1. 握手路徑一致 (`/ws`, `/websocket` 等)
2. `Sec-WebSocket-Protocol` 協商一致 (如 `v10.stomp`, `v11.stomp`)
3. 幀格式:文本幀 UTF-8、二進制幀任意
4. 心跳間隔協商 (建議雙端 30s ping)
**Boost.Beast 是現代 C++ WebSocket 開發的標準答案**。配合 Asio 生態、CMake、vcpkg/Conan 依賴管理,可構建高性能、跨平台、標準合規的客戶端/服務端。舊專案可用 `websocketpp` 平滑遷移。