wsServer - ไลบรารีเซิร์ฟเวอร์ WebSocket ขนาดเล็กมากที่เขียนด้วยภาษา C
wsServer เป็นไลบรารีเซิร์ฟเวอร์ WebSocket ขนาดเล็กน้ำหนักเบาที่เขียนด้วยภาษา C ซึ่งตั้งใจให้ใช้งานง่าย รวดเร็ว สามารถแฮ็กได้ และสอดคล้องกับ RFC 6455
คุณสมบัติหลักคือ:
ส่ง/รับข้อความและข้อความไบนารี
เฟรมปิง/ปอง
การเปิด/ปิดการจับมือกัน
ตามเหตุการณ์ (onmessage, onopen, onclose)
การพกพา: ทำงานได้ดีบน Windows, Linux (รวม Android), macOS และ FreeBSD
ดูรายงานของ Autobahn และเอกสารสำหรับการวิเคราะห์ 'เชิงลึก'
wsServer ต้องการเพียงคอมไพเลอร์ที่เข้ากันได้กับ C99 (เช่น GCC, Clang, TCC และอื่น ๆ ) และไม่มีไลบรารีภายนอก
วิธีที่ต้องการในการสร้าง wsServer บนสภาพแวดล้อม Linux:
โคลนคอมไพล์ https://github.com/Theldus/wsServercd wsServer/ make# นอกจากนี้ ผู้ใช้ยังสามารถติดตั้ง wsServer ในระบบ # ไม่ว่าจะบนพาธดีฟอลต์หรือโดยระบุ PREFIX หรือ DESTDIR env# vars ให้กับ Makefile.make ติดตั้ง # หรือทำการติดตั้ง DESTDIR=/my/folder/
CMake ช่วยให้ผู้ใช้สามารถสร้าง wsServer ในสภาพแวดล้อมอื่นที่ไม่ใช่ Linux ได้อย่างง่ายดาย และยังอนุญาตให้ใช้ IDE เพื่อสร้างโปรเจ็กต์โดยอัตโนมัติ หากเป็นกรณีของคุณ:
โคลนคอมไพล์ https://github.com/Theldus/wsServercd wsServer/ mkdir build && ซีดี build/ มะ.. ทำ ./examples/echo/echo # กำลังรอการเชื่อมต่อขาเข้า...
Windows มีการสนับสนุนดั้งเดิมผ่าน MinGW การตั้งค่า toolchain และขั้นตอนการสร้างมีรายละเอียดอยู่ที่นี่
wsServer ทำให้การจัดการซ็อกเก็ตง่ายขึ้นโดยอนุญาตให้คุณมุ่งเน้นไปที่เหตุการณ์ที่แตกต่างกันสามประเภทเท่านั้น:
/* ลูกค้าใหม่ */void onopen(ws_cli_conn_t client);/* ไคลเอ็นต์ถูกตัดการเชื่อมต่อ */void onclose(ws_cli_conn_t client);/* ลูกค้าส่งข้อความ */void onmessage(ไคลเอ็นต์ ws_cli_conn_t, const char ที่ไม่ได้ลงนาม *msg, ขนาด uint64_t, ประเภท int);
นี่เป็นสิ่งเดียวที่คุณต้องกังวล คุณไม่จำเป็นต้องคิดถึงค่าที่ส่งคืนในซ็อกเก็ต การยอมรับการเชื่อมต่อ หรือสิ่งอื่นใด ลูกค้าแต่ละรายจะได้รับการจัดการแยกกันเป็นโบนัส ดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนั้นเช่นกัน
ตัวอย่างเพิ่มเติม รวมถึงไฟล์ html ที่เกี่ยวข้อง มีอยู่ใน example/ โฟลเดอร์ ;-)
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <ws.h>/** * @brief ฟังก์ชันนี้จะถูกเรียกทุกครั้งที่เปิดการเชื่อมต่อใหม่ * @param ไคลเอนต์ การเชื่อมต่อไคลเอนต์ */เป็นโมฆะ onopen (ไคลเอนต์ ws_cli_conn_t) {char *cli;cli = ws_getaddress(client);printf("การเชื่อมต่อเปิดแล้ว addr: %sn", cli); }/** * @brief ฟังก์ชั่นนี้จะถูกเรียกทุกครั้งที่ปิดการเชื่อมต่อ * @param ไคลเอนต์ การเชื่อมต่อไคลเอนต์ */เป็นโมฆะ onclose (ไคลเอนต์ ws_cli_conn_t) {char *cli;cli = ws_getaddress(client);printf("การเชื่อมต่อปิด, addr: %sn", cli); }/** * กิจกรรม @brief Message อยู่ที่นี่ * @param ไคลเอนต์ การเชื่อมต่อไคลเอนต์ * @param เนื้อหาข้อความ * @ขนาดพารามิเตอร์ ขนาดข้อความ * ประเภท @param ประเภทข้อความ */เป็นโมฆะ onmessage (ไคลเอนต์ ws_cli_conn_t, const char * msg ที่ไม่ได้ลงนาม, ขนาด uint64_t, ประเภท int) {char *cli;cli = ws_getaddress(client);printf("ฉันได้รับข้อความ: %s (%zu), from: %sn", msg,size, cli);sleep(2);ws_sendframe_txt(client, " สวัสดี");sleep(2);ws_sendframe_txt(ไคลเอนต์ "โลก"); } int main (เป็นโมฆะ) {/* * ลูปหลัก ฟังก์ชันนี้จะไม่มีวัน* ส่งคืน * * *หาก .thread_loop เป็น != 0 เธรดใหม่จะถูกสร้างขึ้น * เพื่อจัดการการเชื่อมต่อใหม่และ ws_socket() จะกลายเป็น * ไม่ถูกบล็อก */ws_socket(&(struct ws_server){/* * เชื่อมโยงโฮสต์ เช่น: * localhost -> localhost/127.0.0.1 * 0.0.0.0 -> IPv4 ทั่วโลก * :: -> global IPv4+IPv6 (Dual stack) * /.host = "โลคัลโฮสต์", .พอร์ต = 8080, .thread_loop = 0, .timeout_ms = 1,000, .evs.onopen = &เปิด .evs.onclose = &onclose, .evs.onmessage = &onmessage});กลับมา (0); -
ตัวอย่างข้างต้นสามารถสร้างได้ด้วย: make examples
ภายใน extra/toyws
มีโปรเจ็กต์คู่หูชื่อ ToyWS ToyWS เป็นไคลเอนต์ WebSocket ที่เรียบง่ายและโง่เง่าซึ่งสร้างขึ้นเพื่อทำงานกับ wsServer โดยเฉพาะ มีข้อ จำกัด อย่างมาก การใช้งานไม่สนับสนุนอย่างมากกับเซิร์ฟเวอร์อื่นนอกเหนือจาก wsServer และมีวัตถุประสงค์เพื่อใช้ร่วมกับ wsServer เท่านั้น
มินิโปรเจ็กต์นี้ทำหน้าที่เป็นตัวช่วยเหลือ wsServer เท่านั้น และช่วยให้ผู้ใช้ไม่ต้องใช้โปรเจ็กต์เพิ่มเติมเพื่อใช้ wsServer อย่างครบถ้วน
ข้อมูลเพิ่มเติมได้ที่: extra/toyws/README.md
wsServer ไม่รองรับการเข้ารหัสในขณะนี้ อย่างไรก็ตาม สามารถใช้ร่วมกับ Stunnel ซึ่งเป็นพร็อกซีที่เพิ่มการรองรับ TLS ให้กับโปรเจ็กต์ที่มีอยู่ได้ เพียงทำตามขั้นตอนง่าย ๆ สี่ขั้นตอนเหล่านี้เพื่อรับการสนับสนุน TLS บน wsServer
wsServer เปิดรับชุมชนเสมอและยินดีที่จะยอมรับการมีส่วนร่วม ไม่ว่าจะเกี่ยวกับปัญหา เอกสาร การทดสอบ คุณสมบัติใหม่ การแก้ไขข้อบกพร่อง การพิมพ์ผิด... ยินดีต้อนรับเข้าสู่ต่างประเทศ อย่าลืมอ่านแนวทางการเขียนโค้ดก่อนส่ง PR
โครงการนี้เป็นประโยชน์กับคุณหรือไม่? มีอะไรจะพูดเกี่ยวกับเรื่องนี้ไหม? แสดงความคิดเห็นของคุณที่นี่
wsServer ได้รับอนุญาตภายใต้ใบอนุญาต GPLv3 เขียนโดย Davidson Francis และผู้ร่วมให้ข้อมูลคนอื่นๆ