gwsocket เป็น WebSocket Server ที่เรียบง่าย สแตนด์อโลน ไม่เชื่อภาษาและรองรับ RFC6455 เขียนด้วยภาษา C โดยตั้งอยู่ระหว่างแอปพลิเคชันของคุณกับเบราว์เซอร์ของไคลเอ็นต์ ทำให้มีการสื่อสารแบบสองทิศทางที่รวดเร็วระหว่างทั้งสองสิ่งนี้ได้อย่างง่ายดายและยืดหยุ่น ข้อมูลเพิ่มเติมได้ที่: https://gwsocket.io
ง่ายมาก เพียงเปลี่ยนเส้นทางเอาต์พุตจากแอปพลิเคชันของคุณ (stdout) ไปยัง stdin
หรือไปยังไฟล์ (ไปป์ที่มีชื่อ) แล้วปล่อยให้ gwsocket ถ่ายโอนข้อมูลไปยังเบราว์เซอร์ แค่นั้นเอง
ตัวอย่างเช่น การปรับแต่งบันทึกของเซิร์ฟเวอร์ของคุณลงในเบราว์เซอร์ไม่ใช่เรื่องง่ายอีกต่อไป
# tail -f /var/log/nginx/access.log > /tmp/wspipein.fifo
หรือ
# tail -f /var/log/nginx/access.log | gwsocket
คุณยังสามารถนำข้อมูลของลูกค้าไปไว้ใน (stdin) แอปพลิเคชันของคุณได้ ในความเป็นจริง คุณยังสามารถส่งเอาต์พุตของโปรแกรม ncurses ที่คุณชื่นชอบไปยังเบราว์เซอร์ได้ ดู screencast ด้านบน
ฉันต้องการ WebSocket Server ที่รองรับ RFC6455 ที่เขียนด้วยภาษา C ที่รวดเร็ว เรียบ ง่าย ไม่มีการพึ่งพา ไม่มีไลบรารี่ ซึ่งฉันสามารถใช้กับ GoAccess เวอร์ชัน 1.0 ได้โดยเพียงแค่ส่งข้อมูลเข้าและออก — WebSockets ทำได้ง่าย!
gwsocket ไม่เชื่อเรื่องภาษา ดูที่ Man Page เพื่อดูรายละเอียดเพิ่มเติมและตัวอย่างเกี่ยวกับวิธีการรับข้อมูลจากเบราว์เซอร์และวิธีส่งไปยังเบราว์เซอร์
การติดตั้ง gwsocket นั้นค่อนข้างง่าย เพียงดาวน์โหลด แยกและคอมไพล์ด้วย:
$ wget https://tar.gwsocket.io/gwsocket-0.4.tar.gz
$ tar -xzvf gwsocket-0.4.tar.gz
$ cd gwsocket-0.4/
$ ./configure
$ make
# make install
ไม่จำเป็นต้องพึ่งพา มันไม่ดีเลย :) เกือบแล้ว คุณต้อง gcc
, make
ฯลฯ
$ git clone s://github.com/allinurl/gwsocket.git
$ cd gwsocket
$ autoreconf -fiv
$ ./configure
$ make
# make install
เพื่อสร้างช่องทางระหว่างแอปพลิเคชันของคุณกับเบราว์เซอร์ของไคลเอ็นต์ gwsocket มีสองวิธีที่อนุญาตให้ผู้ใช้ส่งข้อมูลเข้าและออก ประการแรกคือผ่านการใช้อินพุตมาตรฐาน (stdin) และเอาต์พุตมาตรฐาน (stdout) วิธีที่สองคือผ่านส่วนหัวที่มีขนาดคงที่ตามด้วยเพย์โหลด ดูตัวเลือกด้านล่างสำหรับรายละเอียดเพิ่มเติม
อินพุต/เอาต์พุตมาตรฐานเป็นวิธีที่ง่ายที่สุดในการส่ง/รับข้อมูลไปยัง/จากไคลเอนต์ อย่างไรก็ตาม จำกัดอยู่เพียงการเผยแพร่ข้อความไปยังไคลเอนต์ทั้งหมด หากต้องการส่งข้อความถึงหรือรับจากไคลเอ็นต์เฉพาะ ให้ใช้โหมดเข้มงวดในส่วนถัดไป ดูตัวอย่างเฉพาะภาษาได้ที่นี่
gwsocket ใช้โปรโตคอลเล็กๆ ของตัวเองในการส่ง/รับข้อมูล ตรงกันข้ามกับโหมด stdin/stdout โหมดเข้มงวดช่วยให้คุณสามารถส่ง/รับข้อมูลไปยัง/จากไคลเอนต์ที่เชื่อมต่อเฉพาะได้ เช่นเดียวกับการติดตามว่าใครเปิด/ปิดการเชื่อมต่อ WebSocket นอกจากนี้ยังช่วยให้คุณสามารถแพ็คและส่งข้อมูลได้มากเท่าที่คุณต้องการในข้อความเดียว ดูตัวอย่างเฉพาะภาษาได้ที่นี่
ตัวเลือกต่อไปนี้สามารถป้อนให้กับบรรทัดคำสั่งได้
ตัวเลือกบรรทัดคำสั่ง | คำอธิบาย |
---|---|
-p --port | ระบุพอร์ตที่จะผูก |
-h --help | วิธีใช้บรรทัดคำสั่ง |
-V --version | แสดงข้อมูลเวอร์ชันและออก |
--access-log=<path/file> | ระบุเส้นทาง/ไฟล์สำหรับบันทึกการเข้าถึง |
--addr=<addr> | ระบุที่อยู่ที่จะผูก |
--echo-mode | ตั้งค่าเซิร์ฟเวอร์ให้สะท้อนข้อความที่ได้รับทั้งหมด |
--max-frame-size=<bytes> | ขนาดสูงสุดของเฟรมเว็บซ็อกเก็ต |
--origin=<origin> | ตรวจสอบให้แน่ใจว่าไคลเอนต์ส่งส่วนหัวต้นทางที่ระบุเมื่อมีการจับมือกัน |
--pipein=<path/file> | สร้างไปป์ที่มีชื่อ (FIFO) ที่อ่านจากบนเส้นทาง/ไฟล์ที่กำหนด |
--pipeout=<path/file> | สร้างไปป์ที่มีชื่อ (FIFO) ที่เขียนไปยังเส้นทาง/ไฟล์ที่กำหนด |
--std | เปิดใช้งาน --stdin และ --stdout |
--stdin | ส่ง stdin ไปที่ websocket |
--stdout | ส่งข้อมูล websocket ที่ได้รับไปที่ stdout |
--strict | แยกวิเคราะห์ข้อความโดยใช้โหมดเข้มงวด ดูหน้าคนสำหรับรายละเอียดเพิ่มเติม |
--ssl-cert=<cert.crt> | เส้นทางไปยังใบรับรอง SSL |
--ssl-key=<priv.key> | เส้นทางไปยังคีย์ส่วนตัว SSL |
--unix-socket=<addr> | ระบุที่อยู่ซ็อกเก็ตโดเมน UNIX เพื่อผูกเซิร์ฟเวอร์ |
epoll
และ kqueue
เอ็มไอทีได้รับใบอนุญาต
ยินดีให้ความช่วยเหลือเกี่ยวกับ gwsocket วิธีที่มีประโยชน์ที่สุดคือลองใช้และให้ข้อเสนอแนะ คุณสามารถใช้ตัวติดตามปัญหา Github และดึงคำขอเพื่อหารือและส่งการเปลี่ยนแปลงรหัสได้ตามสบาย
สนุก!