Server Web Kecil
Server web ringan C++ di Linux membantu pemula dengan cepat mempraktikkan pemrograman jaringan dan membangun server mereka sendiri.
- Model konkurensi menggunakan kumpulan thread + soket non-pemblokiran + epoll (diimplementasikan oleh ET dan LT) + pemrosesan peristiwa (diimplementasikan oleh Reaktor dan Proactor yang disimulasikan)
- Gunakan mesin negara untuk mengurai pesan permintaan HTTP, mendukung penguraian permintaan GET dan POST
- Akses database server untuk mengimplementasikan fungsi registrasi dan login pengguna web, dan dapat meminta gambar server dan file video
- Menerapkan sistem log sinkron/asinkron untuk mencatat status pengoperasian server
- Setelah stress test Webbench , puluhan ribu pertukaran data koneksi bersamaan dapat dicapai
tulis di depan
- Selama pengembangan dan pemeliharaan proyek ini, banyak sepatu anak-anak yang ditawari amplop merah untuk mendukung saya, namun saya menolak semuanya. Saya tidak akan, dan di masa depan, tidak akan mengemas proyek ini ke dalam kursus apa pun untuk dijual, dan saya juga tidak akan membuka saluran dukungan apa pun.
- Saat ini, ada orang di Internet yang mengemas proyek ini atau proyek Youshuangdao menjadi kursus untuk dijual. Harap perhatikan baik-baik dan identifikasi proyek server C++ dari situs web pembelajaran/berburu pekerjaan utama, dan jangan membayar secara membabi buta.
- Seorang pewawancara senior menemukan saya di perusahaan melalui informasi proyek dan menemukan bahwa banyak resume anak-anak menggunakan proyek ini. Namun pada saat proses wawancara, saya menemukan
很多童鞋通过本项目入门了,但是对于一些东西还是属于知其然不知其所以然的状态,需要加强下基础知识的学习
.- "Pemrograman Tingkat Lanjut di Lingkungan Unix"
- "pemrograman jaringan unix"
- Terima kasih kepada seluruh atasan, sahabat, dan sepatu anak atas pengakuan dan dukungannya. Merupakan suatu kehormatan besar bagi saya jika proyek ini dapat membantu Anda memulai.
Daftar isi
Ringkasan | bingkai | Demo | tes stres | Ubah catatan | Pengunduhan kode sumber | Berlari dengan cepat | Operasi yang dipersonalisasi | Masak Ding Jie Niu | implementasi CPP11 | Ucapan Terima Kasih |
---|
Ringkasan
- C/C++
- model B/S
- Kelas pembungkus mekanisme sinkronisasi thread
- kelas pemrosesan permintaan koneksi http
- Kumpulan thread semi-sinkron/semi-reaktor
- Timer untuk menangani koneksi yang tidak aktif
- Sistem logging sinkron/asinkron
- Kumpulan koneksi basis data
- Registrasi thread sinkron dan verifikasi login
- Tes Stres Server Sederhana
bingkai
Demo
- Permintaan demonstrasi file gambar (6M)
- Minta demonstrasi file video (39M)
tes stres
Setelah menutup log, gunakan Webbench untuk melakukan stress test di server. Gunakan mode ET dan LT untuk masing-masing mendengarkan dan connfd. Keduanya dapat mencapai puluhan ribu koneksi bersamaan.
- Proaktor, LT + LT, 93251 QPS
- Proaktor, LT + ET, 97459 QPS
- Proaktor, ET + LT, 80498 QPS
- Proaktor, ET + ET, 92167 QPS
- Reaktor, LT + ET, 69175 QPS
- Jumlah total koneksi bersamaan: 10500
- Akses waktu server: 5 detik
- Semua akses berhasil
Catatan: Saat menggunakan webbench proyek ini untuk pengujian stres, jika pesan kesalahan menunjukkan bahwa perintah webbench tidak dapat ditemukan, hapus file webbench yang dapat dieksekusi dan kompilasi ulang.
Ubah catatan
Pengunduhan kode sumber
Saat ini ada dua versi. Ada perubahan besar dalam struktur kode antar versi, dan dokumentasi serta metode menjalankan kode juga tidak konsisten. Versi yang difaktorkan ulang lebih ringkas, dan versi asli (raw_version) lebih besar, mempertahankan cita rasa asli kode Youshuang, dan lebih mudah untuk memulai dengan versi asli.
Jika Anda mengalami kegagalan saat mendownload kode github, atau aksesnya terlalu lambat, Anda dapat mendownloadnya dari link berikut dan menyinkronkannya dengan kiriman Github terbaru.
- Alamat pengunduhan versi yang difaktorkan ulang: BaiduYun
- Alamat unduhan versi asli (raw_version): BaiduYun
- Kode ekstraksi: 9wye
- Untuk menjalankan versi aslinya, silakan merujuk ke dokumentasi asli.
Berlari dengan cepat
Lingkungan pengujian server
- Ubuntu versi 16.04
- MySQL versi 5.7.29
Lingkungan pengujian browser
- Baik Windows dan Linux tersedia
- krom
- FireFox
- Belum ada pengujian pada browser lain
Pastikan database MySQL diinstal sebelum pengujian
// 建立yourdb库
create database yourdb;
// 创建user表
USE yourdb;
CREATE TABLE user (
username char ( 50 ) NULL,
passwd char( 50 ) NULL
)ENGINE=InnoDB;
// 添加数据
INSERT INTO user (username, passwd) VALUES( ' name ' , ' passwd ' );
Ubah informasi inisialisasi database di main.cpp
//数据库登录名,密码,库名
string user = " root " ;
string passwd = " root " ;
string databasename = " yourdb " ;
membangun
Mulai server
Sisi peramban
Operasi yang dipersonalisasi
./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]
Pengingat hangat: Parameter di atas tidak diperlukan, Anda tidak perlu menggunakan semuanya, Anda dapat memilihnya sesuai dengan situasi pribadi Anda.
- -p, nomor port khusus
- -l, pilih metode penulisan log, defaultnya adalah penulisan sinkron
- 0, penulisan sinkron
- 1. Penulisan asinkron
- -m, kombinasi mode mendengarkan dan connfd, defaultnya adalah LT + LT
- 0, berarti menggunakan LT + LT
- 1, berarti menggunakan LT + ET
- 2, berarti menggunakan ET + LT
- 3, artinya menggunakan ET + ET
- -o, tutup koneksi dengan baik, tidak digunakan secara default
- 0, tidak digunakan
- 1. Gunakan
- -s, jumlah koneksi database
- -t, jumlah utas
- -c, tutup log, buka secara default
- 0, buka lognya
- 1. Tutup lognya
- -a, pilih model reaktor, defaultnya adalah Proactor
- 0, model Proaktor
- 1. Model reaktor
Uji contoh perintah dan makna
./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1
Masak Ding Jie Niu
Iterasi versi terbaru lebih cepat, dan konten berikut sebagian besar didasarkan pada kode versi lama (raw_version) untuk penjelasan detailnya.
- Perspektif pemula: Pahami TinyWebServer milik presiden dalam satu artikel
- Penjelasan rinci tentang versi terbaru proyek server Web - kelas enkapsulasi mekanisme sinkronisasi thread 01
- Penjelasan mendetail tentang versi terbaru proyek server Web - 02 Kumpulan thread semi-reaktor semi-sinkron (Bagian 1)
- Penjelasan mendetail tentang versi terbaru proyek server Web - 03 Kumpulan thread semi-reaktor semi-sinkron (Bagian 2)
- Penjelasan mendetail tentang proyek server Web versi terbaru - 04 pemrosesan koneksi http (Bagian 1)
- Penjelasan rinci tentang proyek server Web versi terbaru - 05 pemrosesan koneksi http (Bagian 2)
- Penjelasan rinci tentang proyek server Web versi terbaru - 06 pemrosesan koneksi http (Bagian 2)
- Penjelasan rinci tentang versi terbaru proyek server Web - 07 Pengatur waktu pemrosesan koneksi tidak aktif (Bagian 1)
- Penjelasan rinci tentang versi terbaru proyek server Web - 08 Pengatur waktu pemrosesan koneksi tidak aktif (Bagian 2)
- Penjelasan rinci tentang proyek server Web versi terbaru - 09 Sistem logging (Bagian 1)
- Penjelasan rinci tentang proyek server Web versi terbaru - 10 Sistem logging (Bagian 2)
- Penjelasan rinci tentang versi terbaru proyek server Web - 11 Kumpulan koneksi basis data
- Penjelasan rinci tentang proyek server Web versi terbaru - 12 Daftar dan masuk
- Penjelasan rinci tentang proyek server Web versi terbaru - 13 jebakan dan pertanyaan wawancara
- Diperbarui
Sejarah Bintang
implementasi CPP11
Implementasi CPP11 yang lebih sederhana dan elegan: Webserver
Ucapan Terima Kasih
Pemrograman server Linux berkinerja tinggi, ditulis oleh You Shuang.
Terima kasih kepada teman-teman berikut atas PR dan bantuannya: @RownH, @mapleFU, @ZWiley, @zjuHong, @mamil, @byfate, @MaJun827, @BBLiu-coder, @smoky96, @yfBong, @liuwuyao, @Huixxi, @markparticle , @ blogg9ggg.