Pengembang perangkat lunak Jean Fayot merilis sioxx, pustaka klien socket.io modern untuk C++ yang dirancang mengatasi ketidakefisienan pustaka lama socket.io-client-cpp. Pustaka baru ini dibangun di atas nlohmann/json dan Boost.Beast — dua dependensi yang sudah umum digunakan dalam proyek C++ kontemporer — sehingga menghilangkan kebutuhan untuk memelihara beberapa pustaka JSON dan WebSocket secara bersamaan dalam satu basis kode.
Masalah utama yang dihadapi pengembang selama ini adalah arsitektur socket.io-client-cpp yang sudah usang. Pustaka itu masih menggunakan RapidJSON dan websocketpp sebagai dependensi internal, serta sistem build CMake yang ketinggalan zaman. Bagi proyek yang sudah bergantung pada nlohmann/json dan Boost.Asio, mengintegrasikan pustaka lama berarti harus menerima duplikasi dependensi atau memfork kode sumber untuk menyesuaikannya. Fayot memilih menulis ulang dari nol daripada memaksa kompatibilitas.
Keputusan arsitektur paling signifikan dalam sioxx adalah penghapusan hierarki kelas pesan buatan sendiri. Pustaka lama memiliki sio::message dengan turunan int_message, string_message, object_message, array_message, dan binary_message — implementasi ulang tipe nilai JSON dari nol. sioxx mengatasi ini dengan pendekatan minimalis: menggunakan nlohmann::json langsung sebagai tipe pesan. Sebuah alias tipe sederhana `using message = json` menggantikan seluruh subsistem tersebut, sehingga pembuatan argumen event menjadi semudah menyusun array JSON.
Dukungan dua protokol wire menjadi keunggulan teknis lain. socket.io memiliki dua parser di ekosistemnya: protokol teks default dan socket.io-msgpack-parser untuk beban kerja biner berat. sioxx memodelkan ini sebagai antarmuka strategi kecil dengan kelas parser_base, lalu mengimplementasikan json_parser untuk framing teks klasik dan msgpack_parser yang dibangun sepenuhnya di atas nlohmann::json::to_msgpack dan from_msgpack. Pendekatan ini memungkinkan payload biner melakukan round-trip secara native melalui parser MessagePack tanpa tarian placeholder/rekonstruksi yang dibutuhkan protokol JSON untuk BINARY_EVENT dan BINARY_ACK.
Lapisan transport WebSocket dibangun ulang menggunakan Boost.Beast. websocket_transport memiliki boost::asio::io_context sendiri pada thread latar belakang, mendukung ws:// dan wss:// dengan TLS via OpenSSL termasuk SNI, serta mengantrekan penulisan karena aliran Beast tidak aman untuk akses konkuren. Antarmuka transport_base yang tipis — hanya open, send, close, dan terima frame opak — memungkinkan penambahan transport kedua tanpa mengubah lapisan protokol di atasnya.
Transport HTTP long-polling hadir sebagai fallback otomatis ketika koneksi WebSocket gagal. Transport polling melakukan siklus GET/POST Engine.IO v4 normal, membuka koneksi HTTP(S) baru untuk setiap polling atau penulisan, menghormati pengaturan TLS dan header tambahan yang sama, serta mengenkode frame polling biner sebagai paket Engine.IO b + base64. Pengembang juga bisa memaksa polling dari awal melalui opsi `force_http_polling`, berguna untuk lingkungan yang memblokir upgrade WebSocket dan untuk keperluan pengujian.
Struktur lapisan mencerminkan pemisahan nyata antara engine.io dan socket.io: sioxx::client mengelola socketio_client_impl untuk pengiriman paket dan registri namespace, yang berkomunikasi dengan engineio_client untuk handshake Engine.IO v4 dan heartbeat ping/pong, yang kemudian berbicara dengan transport konkret — WebSocket atau HTTP polling. Pemisahan ini menjaga kode tetap modular dan mudah diuji.
Sistem build menggunakan CMake modern dengan dukungan CPM.cmake, find_package, dan instalasi lengkap termasuk export target. Suite pengujian berbasis GoogleTest mencakup parser, transport, parsing URL, logika reconnection, bookkeeping socket, dan framing Engine.IO. Strategi reconnection sendiri menggunakan backoff eksponensial dengan jitter, lebih canggih dari retry sederhana pada pustaka lama.
Bagi pengembang Indonesia yang membangun sistem real-time — baik platform kolaborasi, dashboard monitoring IoT, atau layanan notifikasi — sioxx menawarkan jalan keluar dari ketergantungan ganda. Banyak tim di Indonesia sudah mengadopsi nlohmann/json dan Boost.Asio sebagai standar de facto. Menggunakan pustaka yang berbagi dependensi yang sama berarti biner lebih kecil, waktu kompilasi lebih cepat, dan beban pemeliharaan berkurang. Dukungan MessagePack native juga relevan untuk kasus penggunaan bandwidth-terbatas yang umum di infrastruktur jaringan tertentu di wilayah kita.
Ketersediaan fallback HTTP polling otomatis memiliki nilai praktis di Indonesia, di mana beberapa jaringan korporat atau penyedia layanan internet masih memblokir atau mengganggu koneksi WebSocket. Kemampuan memaksa polling dari awal memastikan aplikasi tetap berfungsi tanpa perlu deteksi lingkungan manual. Hal ini mengurangi friksi deployment di lingkungan produksi yang heterogen.
Proyek ini masih relatif muda dan dikembangkan secara aktif di GitHub di bawah akun jfayot. Komunitas pengembang C++ di Indonesia — yang semakin tumbuh seiring adopsi standar modern seperti C++17/20 — bisa berkontribusi melalui pengujian, pelaporan bug, atau penambahan fitur seperti dukungan proxy atau autentikasi token terintegrasi. Keberadaan alternatif modern ini memperkaya ekosistem dan mendorong praktik pengembangan yang lebih bersih.