[C ++ การสอนขั้นสูง] การพัฒนาเฟรมเวิร์กเซิร์ฟเวอร์ตั้งแต่เริ่มต้น (Sylar)
รองรับรูปแบบการเขียนบันทึกและการจัดรูปแบบการเขียนบันทึกการปรับแต่งรูปแบบการบันทึกระดับการบันทึกการแยกหลายล็อกและฟังก์ชั่นอื่น ๆ ชื่อชื่อไฟล์หมายเลขบรรทัด ฯลฯ
นำแนวคิดของการประชุมเนื่องจากการกำหนดค่า คำจำกัดความพร้อมใช้งาน ไม่จำเป็นต้องแยกวิเคราะห์แยกกัน รองรับฟังก์ชั่นการแจ้งเตือนการเปลี่ยนแปลง ใช้ไฟล์ YAML เป็นเนื้อหาการกำหนดค่า รองรับประเภทข้อมูลในรูปแบบระดับรองรับคอนเทนเนอร์ STL (เวกเตอร์, รายการ, ชุด, แผนที่, ฯลฯ ), รองรับประเภทที่กำหนดเอง (ต้องใช้วิธีการทำให้เป็นอนุกรมและวิธีการ deserialization) ดังนี้:
static sylar::ConfigVar< int >::ptr g_tcp_connect_timeout =
sylar::Config::Lookup ( " tcp.connect.timeout " , 5000 , " tcp connect timeout " );พารามิเตอร์การเชื่อมต่อการเชื่อมต่อ TCP ถูกกำหนดไว้
tcp:
connect:
timeout: 10000โมดูลเธรดสรุปฟังก์ชั่นที่ใช้กันทั่วไปใน pthread เช่นเธรด, semaphore, mutex, rwmutex, spinlock ฯลฯ ซึ่งสามารถอำนวยความสะดวกในการพัฒนาเธรดสำหรับการใช้งานประจำวัน ยิ่งไปกว่านั้น C ++ 11 ไม่ได้ให้การอ่านและเขียน mutex, rwmutex, spinlock ฯลฯ และในสถานการณ์ที่เกิดขึ้นพร้อมกันสูงวัตถุเหล่านี้มักจะใช้ ดังนั้นฉันเลือกที่จะห่อหุ้มด้วยตัวเอง
Coroutine: เธรดโหมดผู้ใช้เทียบเท่ากับเธรดในเธรดมีน้ำหนักเบา เบ็ดซ็อกเก็ตได้รับการกำหนดค่าในการกำหนดค่าที่ตามมาซึ่งสามารถห่อหุ้มการโทรแบบอะซิงโครนัสที่ซับซ้อนในการดำเนินการแบบซิงโครนัส ลดความซับซ้อนของการเขียนตรรกะทางธุรกิจ ปัจจุบัน coroutine ถูกนำไปใช้ตาม UCONTEXT_T และจะถูกนำไปใช้ในวิธีต่อมาโดยใช้ fContext_t ใน boost.context
Coroutine Scheduler จัดการการจัดตารางเวลาของ coroutines และถูกนำไปใช้ภายในเป็นพูลเธรดซึ่งรองรับ coroutines เพื่อสลับระหว่างหลายเธรดและยังสามารถระบุว่า coroutines จะถูกดำเนินการในเธรดคงที่ มันเป็นรูปแบบการจัดตารางเวลา NM coroutine ที่มีเธรด n และ m coroutines นำกลับมาใช้ซ้ำแต่ละเธรด
มรดกและ coroutine scheduler, encapsulate epoll (linux) และรองรับฟังก์ชั่นตัวจับเวลา (ใช้ epoll เพื่อใช้ตัวจับเวลาระดับมิลลิวินาที) และรองรับการเพิ่มการลบและการยกเลิกการอ่านและเขียนซ็อกเก็ต รองรับตัวจับเวลาเพียงครั้งเดียวตัวจับเวลารอบตัวจับเวลาเงื่อนไขและฟังก์ชั่นอื่น ๆ
ระบบเบ็ดพื้นฐานและ API ที่เกี่ยวข้องกับซ็อกเก็ต, API ที่เกี่ยวข้องกับซ็อกเก็ต IO และ APIs ซีรี่ส์ Sleep การควบคุมแบบเปิดของเบ็ดคือเกลียวเม็ด ทางเลือกฟรี ผ่านโมดูล Hook API บางตัวที่ไม่มีฟังก์ชั่นแบบอะซิงโครนัสสามารถใช้เพื่อแสดงประสิทธิภาพแบบอะซิงโครนัส ตัวอย่างเช่น (mysql)
ห่อหุ้มคลาสซ็อกเก็ตให้ฟังก์ชั่นซ็อกเก็ต API ทั้งหมดรวมคลาสที่อยู่และรวมที่อยู่ IPv4, IPv6 และ UNIX นอกจากนี้ยังมีฟังก์ชั่นชื่อโดเมนและความละเอียด IP
โมดูลการทำให้เป็นอนุกรมไบนารีของ Bytearray ให้การดำเนินการทั่วไปเกี่ยวกับข้อมูลไบนารี อ่านและเขียนประเภทพื้นฐาน int8_t, int16_t, int32_t, int64_t, ฯลฯ , ตัวแปรสนับสนุน, std :: สตริงเพื่ออ่านและเขียนการสนับสนุน, สนับสนุนการแปลงไบต์, รองรับการทำให้เป็นอนุกรมกับไฟล์และ deserialization จากไฟล์
ขึ้นอยู่กับคลาสซ็อกเก็ตมันจะห่อหุ้มคลาสเซิร์ฟเวอร์ TCPServer ทั่วไปให้ API ง่าย ๆ ใช้งานง่ายและสามารถผูกที่อยู่หนึ่งตัวขึ้นไปได้อย่างรวดเร็วบริการเริ่มต้นฟังพอร์ตยอมรับการเชื่อมต่อจัดการการเชื่อมต่อซ็อกเก็ตและฟังก์ชั่นอื่น ๆ การใช้งานเซิร์ฟเวอร์ของฟังก์ชั่นทางธุรกิจที่เฉพาะเจาะจงสามารถนำไปใช้ได้อย่างรวดเร็วโดยสืบทอดคลาสนี้
อินเทอร์เฟซแบบครบวงจรของสตรีมมิ่ง ห่อหุ้มไฟล์และซ็อกเก็ตลงในอินเทอร์เฟซแบบรวม เมื่อใช้งานให้ใช้สไตล์แบบครบวงจร ขึ้นอยู่กับสไตล์แบบครบวงจรมันสามารถให้การขยายตัวที่ยืดหยุ่นมากขึ้น SocketStream ถูกนำไปใช้ในปัจจุบัน
Ragel (Finite State Machine, ประสิทธิภาพเทียบเคียงได้กับแอสเซมบลี), ใช้โปรโตคอลอย่างง่ายการใช้งาน HTTP/1.1 และการแยกวิเคราะห์ URI จาก SocketStream จะมีการใช้งาน HTTPConnection (ไคลเอนต์ HTTP) และ HTTPSESSION (ลิงก์เซิร์ฟเวอร์ HTTP) HTTPSERVER ถูกนำมาใช้ตาม TCPSERVER จัดเตรียมฟังก์ชั่นคำขอ API ไคลเอ็นต์ HTTP ที่สมบูรณ์และฟังก์ชั่นเซิร์ฟเวอร์ API พื้นฐาน HTTP
หลังจาก servlet ของ Java ชุดของอินเตอร์เฟส servlet จะถูกนำไปใช้, servletDispatch และ functionservlet Notfoundservlet รองรับการจับคู่ที่แม่นยำของ URI การจับคู่ที่คลุมเครือและฟังก์ชั่นอื่น ๆ ร่วมกับโมดูล HTTP ให้ฟังก์ชันเซิร์ฟเวอร์ HTTP
ข้อมูลการติดต่อ: QQ: 564628276 อีเมล: [email protected] WeChat: Sylar-yin QQ Group: 8151915 (กลุ่มเทคโนโลยี Sylar) หน้าแรกส่วนบุคคล: www.sylar.top GitHub: https://github.com/sylar-yin/