(Catatan dari pengembang utama, sayangnya saya tidak punya terlalu banyak waktu untuk mencurahkan ke perpustakaan ini lagi, mungkin sudah waktunya untuk memberikan pemeliharaan kepada orang lain yang lebih termotivasi?)
IXWebSocket adalah perpustakaan C ++ untuk pengembangan klien dan server WebSocket. Ini memiliki dependensi minimal (tidak ada dorongan), sangat mudah digunakan dan mendukung semua yang mungkin Anda butuhkan untuk WebSocket Dev (SSL, Kompresi Kompresi, Kompilasi pada sebagian besar platform, dll ...). Kode klien dan server HTTP juga tersedia, tetapi belum menerima banyak pengujian.
Ini telah digunakan pada judul video game seluler besar yang mengirim dan menerima banyak pesan sejak 2017 (iOS dan Android). Itu diuji pada macOS, iOS, Linux, Android, Windows dan FreeBSD. Dua tujuan desain penting adalah kesederhanaan dan kebenaran.
/*
* 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 ;
}Tertarik? Baca dokumen! Jika hal -hal tidak berfungsi seperti yang diharapkan, silakan buat masalah di GitHub, atau bahkan lebih baik permintaan tarik jika Anda tahu cara memperbaiki masalah Anda.
Ixwebsocket sedang dikembangkan secara aktif, lihat changelog untuk mengetahui apa yang dimasak. Jika Anda mencari layanan pesan waktu nyata ('server' yang mirip obrolan 'kode WebSocket Anda) dengan banyak fitur seperti sejarah, didukung oleh Redis, lihat Cobra.
Kode klien IXWebSocket adalah Autobahn Compliant dimulai dengan versi 6.0.0. Lihat hasil tes saat ini. Beberapa tes masih gagal dalam kode server.
Dimulai dengan rilis 11.0.8, IXWebSocket harus sepenuhnya kompatibel C ++ 11.
Jika perusahaan atau proyek Anda menggunakan perpustakaan ini, jangan ragu untuk membuka masalah atau PR untuk mengubah daftar ini.
Ada banyak perpustakaan Websocket yang bagus di luar sana, yang mungkin cocok untuk Anda. Ini beberapa yang serius.
UVWeb adalah perpustakaan yang ditulis oleh penulis IxWebsocket yang dibangun di atas UVW, yang merupakan pembungkus C ++ untuk libuv. Ini memiliki lebih banyak dependensi dan tidak mendukung SSL pada titik ini, tetapi dapat digunakan untuk membuka beberapa koneksi dalam satu utas OS tunggal berkat libuv.
Untuk memeriksa kinerja perpustakaan Websocket, Anda dapat melihat proyek AutoRoute.
| Os | Tls | Pembersih | Status |
|---|---|---|---|
| Linux | Openssl | Tidak ada | |
| MacOS | Transportasi yang aman | Pembersih utas | |
| MacOS | Openssl | Pembersih utas | |
| MacOS | Mbedtls | Pembersih utas | |
| Windows | Dengan disabilitas | Tidak ada | |
| UWP | Dengan disabilitas | Tidak ada | |
| Linux | Openssl | Alamat pembersih |