(从主要开发人员那里注意,可悲的是,我没有太多时间去这个图书馆,也许是时候将维护将维护转交给其他更有动力的人了吗?)
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 | 地址消毒剂 |