Implementasi server HTTP berdasarkan C ++ 11 , yang dengan mudah menambahkan instance CGI. Ini dapat menangani sumber daya statis, mendukung koneksi panjang HTTP, dan sebagainya. Kami juga mengimplementasikan log asinkron untuk merekam status server.
Halaman Uji : ExampleCgi, Logincgi, dan Unggahcgi
a) Untuk mengkompilasi file sumber ke dalam executable biner (di folder root)
bash install.shb) Jalankan program (di folder build)
cd build
./httpcgiservermaina) Tulis kelas instance CGI, yang mewarisi kelas Basecgi, seperti exampleCgi.
b) Tambahkan instance CGI ke dalam CGIInstanceFactory.
c) Tambahkan file header ke dalam cGiHeader.
d) Ubah CMakelists.txt.
e) Kemudian bangun dan jalankan.
Hasil tes oleh Webbench ditampilkan di sini.
Lihat Improc.md untuk tinjauan singkat implementasi. Panduan untuk file header:
Basis/log.h antarmuka untuk sistem log, yang berasal dari log asinkron.
Epoller.h merangkum fungsi terkait Epoll.
netutil.h merangkum fungsi terkait soket fd.
SimpleBuffer.H Lapisan Lapisan Aplikasi (kami hanya mengimplementasikan model LT sekarang).
Saluran.h Encapsulate Channel (Event) Fungsi panggilan balik terkait (fungsi baca/tulis/kesalahan).
MinHeap.h Gunakan tumpukan min untuk mengelola waktu koneksi yang kadaluwarsa.
Eventloop.h itu mengelola saluran (acara), yang ditentukan ke Epoller, dan memproses saluran aktif (acara).
EventLoopThread.h Mengelola antrian Connect, dan Socket Push Thread Push Thread utama ke dalam antrian, lalu utas ini menambahkan soket FD ke EventLoop -nya.
EventLoopThreadPool.h Mengelola beberapa utas, socket connection Push Thread utama ke threadpool, ia mengirimkan soket ke utasnya.
tcpserver.h Terima soket koneksi FD, dan ketika acara baca terjadi pada soket koneksi, secara otomatis membaca aliran byte ke buffer aplikasi saluran, dan menjalankan fungsi callback baca. Sama seperti peristiwa tulis dan kesalahan terjadi.
httpmessage.h parse permintaan http, bangun pesan respons http. Di sini, kami menggunakan mesin negara bagian untuk memproses permintaan HTTP.
Basecgi.h Kelas abstrak kelas instance CGI. Ini menyediakan antarmuka proses, kami menggunakannya untuk memproses permintaan CGI.
Includeecgiheader.h termasuk kelas instance CGI, yang digunakan untuk CGIDISPATCH.
cgidispatch.h Dispatcher CGI, yang menggunakan URL untuk menemukan instance CGI, untuk menjalankan program CGI.
httpcgiserver.h Saat membaca Event Happend, pertama -tama mem -parsing permintaan HTTP di buffer aplikasi saluran, kemudian menemukan instance CGI dan memproses permintaan.
httpcgiservermain.cpp http server utama.
exampleCgi/examplecgi.h dan logincgi/logincgi.h Contoh cara menulis kelas instance CGI. Webfile/login termasuk file .html, .js, .css yang dibutuhkan oleh kelas logincgi.