wsServer - perpustakaan server WebSocket yang sangat kecil yang ditulis dalam C
wsServer adalah pustaka server WebSocket kecil dan ringan yang ditulis dalam C yang dimaksudkan agar mudah digunakan, cepat, dapat diretas, dan mematuhi RFC 6455.
Fitur utamanya adalah:
Kirim/Terima pesan Teks dan Biner
Bingkai PING/PONG
Membuka/Menutup jabat tangan
Berdasarkan acara (onmessage, onopen, onclose)
Portabilitas: Berfungsi dengan baik di Windows, Linux (termasuk Android), macOS dan FreeBSD
Lihat laporan Autobahn dan dokumen untuk analisis 'mendalam'.
wsServer hanya memerlukan kompiler yang kompatibel dengan C99 (seperti GCC, Clang, TCC, dan lainnya) dan tidak ada perpustakaan eksternal.
Cara yang lebih disukai untuk membangun wsServer di lingkungan Linux:
git clone https://github.com/Theldus/wsServercd wsServer/ make# Secara opsional, pengguna juga dapat menginstal wsServer ke dalam sistem,# baik pada jalur default atau dengan memberikan PREFIX atau DESTDIR env# vars ke Makefile.make install # Atau make install DESTDIR=/my/folder/
CMake memungkinkan pengguna untuk dengan mudah membangun wsServer di lingkungan lain selain Linux dan juga memungkinkan penggunaan IDE untuk membangun proyek secara otomatis. Jika itu kasus Anda:
git clone https://github.com/Theldus/wsServercd wsServer/ mkdir membangun && cd membangun/ buatlah.. membuat ./examples/echo/echo # Menunggu koneksi masuk...
Windows memiliki dukungan asli melalui MinGW, pengaturan rantai alat dan langkah-langkah pembuatan dirinci di sini.
wsServer menyederhanakan manajemen soket dengan memungkinkan Anda fokus hanya pada tiga jenis peristiwa berbeda:
/* Klien baru. */void onopen(klien ws_cli_conn_t);/* Klien terputus. */void onclose(ws_cli_conn_t client);/* Klien mengirim pesan teks. */void onmessage(klien ws_cli_conn_t, const unsigned char *msg, ukuran uint64_t, tipe int);
Ini adalah satu-satunya hal yang perlu Anda khawatirkan. Anda tidak perlu memikirkan nilai pengembalian di soket, menerima koneksi, atau apa pun. Sebagai bonusnya, setiap klien ditangani dalam thread terpisah, jadi tidak perlu khawatir tentang hal itu juga.
Contoh lebih lanjut, termasuk file htmlnya masing-masing, dapat ditemukan di folder contoh/, ;-).
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <ws.h>/** * @brief Fungsi ini dipanggil setiap kali koneksi baru dibuka. * @param klien Koneksi klien. */batalkan saat terbuka(klien ws_cli_conn_t) {char *cli;cli = ws_getaddress(client);printf("Koneksi terbuka, alamat: %sn", cli); }/** * @brief Fungsi ini dipanggil setiap kali koneksi ditutup. * @param klien Koneksi klien. */batalkan penutupan(klien ws_cli_conn_t) {char *cli;cli = ws_getaddress(client);printf("Koneksi ditutup, alamat: %sn", cli); }/** * @acara Pesan Singkat ada di sini. * @param klien Koneksi klien. * @param pesan Isi pesan. * @param ukuran Ukuran pesan. * @param ketik Jenis pesan. */void onmessage(klien ws_cli_conn_t,const unsigned char *pesan, ukuran uint64_t, tipe int) {char *cli;cli = ws_getaddress(client);printf("Saya menerima pesan: %s (%zu), dari: %sn", msg,size, cli);sleep(2);ws_sendframe_txt(client, " halo");sleep(2);ws_sendframe_txt(klien, "dunia"); }int utama(batal) {/* * Loop utama, fungsi ini tidak pernah* kembali. * * *Jika .thread_loop adalah != 0, thread baru dibuat * untuk menangani koneksi baru dan ws_socket() menjadi * non-blocking. */ws_socket(&(struct ws_server){/* * Mengikat host, seperti: * localhost -> localhost/127.0.0.1 * 0.0.0.0 -> global IPv4 * :: -> global IPv4+IPv6 (Dual stack) * /.host = "host lokal", .port = 8080, .thread_loop = 0, .timeout_ms = 1000, .evs.onopen = &onopen, .evs.onclose = &onclose, .evs.onmessage = &onmessage});kembali (0); }
contoh di atas dapat dibangun dengan: make examples
.
Di dalam extra/toyws
ada proyek pendamping yang disebut ToyWS. ToyWS adalah klien WebSocket yang sangat sederhana & bodoh yang dibuat khusus untuk bekerja dengan wsServer. Sangat terbatas, penggunaannya sangat tidak disarankan dengan server lain selain wsServer dan hanya dimaksudkan untuk digunakan bersama dengan wsServer.
Proyek mini ini hanya berfungsi sebagai bantuan untuk wsServer dan membebaskan pengguna dari penggunaan proyek tambahan untuk menggunakan wsServer secara keseluruhan.
Info lebih lanjut di: extra/toyws/README.md
wsServer saat ini tidak mendukung enkripsi. Namun, dimungkinkan untuk menggunakannya bersama dengan Stunnel, sebuah proxy yang menambahkan dukungan TLS ke proyek yang sudah ada. Cukup ikuti empat langkah mudah ini untuk mendapatkan dukungan TLS di wsServer.
wsServer selalu terbuka untuk komunitas dan bersedia menerima kontribusi, baik terkait masalah, dokumentasi, pengujian, fitur baru, perbaikan bug, kesalahan ketik... selamat datang. Pastikan untuk membaca pedoman gaya pengkodean sebelum mengirimkan PR.
Apakah proyek ini bermanfaat bagi Anda? Ada yang ingin Anda katakan tentang hal itu? Tinggalkan komentar Anda di sini.
wsServer dilisensikan di bawah Lisensi GPLv3. Ditulis oleh Davidson Francis dan kontributor lainnya.