Linux 기반의 C++ 경량 웹 서버는 초보자가 네트워크 프로그래밍을 빠르게 연습하고 자신만의 서버를 구축할 수 있도록 도와줍니다.
很多童鞋通过本项目入门了,但是对于一些东西还是属于知其然不知其所以然的状态,需要加强下基础知识的学习
.개요 | 액자 | 데모 | 스트레스 테스트 | 변경 로그 | 소스코드 다운로드 | 빨리 달려라 | 맞춤형 운영 | 쿡 딩 지에 니우 | CPP11 구현 | 감사의 말 |
---|
- C/C++
- B/S 모델
- 스레드 동기화 메커니즘 래퍼 클래스
- http 연결 요청 처리 클래스
- 반동기식/반리액터 스레드 풀
- 비활성 연결을 처리하는 타이머
- 동기/비동기 로깅 시스템
- 데이터베이스 연결 풀
- 동기 스레드 등록 및 로그인 확인
- 간단한 서버 스트레스 테스트
- 데모 등록
- 로그인 데모
- 이미지 파일 데모 요청(6M)
- 동영상 파일 시연 요청(39M)
로그를 닫은 후 Webbench를 사용하여 서버에서 스트레스 테스트를 수행합니다. 각각 Listenfd 및 connfd에 대해 ET 및 LT 모드를 사용합니다. 둘 다 수만 개의 동시 연결을 달성할 수 있습니다. 두 가지를 조합한 후의 테스트 결과는 다음과 같습니다.
- 프로액터, LT + LT, 93251 QPS
- 프로액터, LT + ET, 97459 QPS
- 프로액터, ET + LT, 80498 QPS
- 프로액터, ET + ET, 92167 QPS
- 리액터, LT + ET, 69175 QPS
- 총 동시 연결 수: 10500
- 접속 서버 시간: 5초
- 모든 액세스가 성공했습니다.
참고: 본 프로젝트의 웹벤치를 스트레스 테스트용으로 사용할 때, 웹벤치 명령을 찾을 수 없다는 오류 메시지가 나타나면 웹벤치 실행 파일을 삭제하고 다시 컴파일하시기 바랍니다.
lock.h
의 캡슐화 클래스를 개선하고 동기화 메커니즘을 균일하게 사용합니다. 현재 두 가지 버전이 있습니다. 버전 간 코드 구조에 큰 변화가 있으며, 문서화 및 코드 실행 방법도 일관성이 없습니다. 리팩터링된 버전은 더 간결하고 원래 버전(raw_version)은 더 크며 Youshuang 코드의 원래 풍미를 유지하며 원래 버전으로 시작하기가 더 쉽습니다.
Github 코드 다운로드에 실패하거나 접속 속도가 너무 느린 경우, 다음 링크에서 다운로드하여 최신 Github 제출과 동기화할 수 있습니다.
서버 테스트 환경
브라우저 테스트 환경
테스트하기 전에 MySQL 데이터베이스가 설치되어 있는지 확인하십시오.
// 建立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 ' );
main.cpp에서 데이터베이스 초기화 정보 수정
//数据库登录名,密码,库名
string user = " root " ;
string passwd = " root " ;
string databasename = " yourdb " ;
짓다
sh ./build.sh
서버 시작
./server
브라우저 측
ip: 9006
./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]
알림: 위의 매개변수는 필요하지 않으며 모두 사용할 필요가 없으며 개인 상황에 따라 선택할 수 있습니다.
테스트 예시 명령 및 의미
./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1
최근 버전의 iteration이 더 빨라졌으며, 자세한 설명을 위해 다음 내용은 대부분 이전 버전(raw_version) 코드를 기반으로 작성되었습니다.
더 간단하고 더 우아한 CPP11 구현: 웹서버
You Shuang이 작성한 Linux 고성능 서버 프로그래밍.
PR과 도움을 주신 다음 친구들에게 감사드립니다: @RownH, @mapleFU, @ZWiley, @zjuHong, @mamil, @byfate, @MaJun827, @BBLiu-coder, @smoky96, @yfBong, @liuwuyao, @Huixxi, @markparticle , @blogg9ggg.