# SocketServer1.0 **Repository Path**: nirvana-reborn_cpp/SocketServer1.0 ## Basic Information - **Project Name**: SocketServer1.0 - **Description**: 基于C/C++底层socket实现并发网络服务器 主要实现了HttpServer,能应付上百并发量(当然了,你要是想应付成千上万当然也行) 用到的东西一览:C/C++、CMake、jsoncpp、socket、epoll、多线程、线程池、并发、单例模式、定时器、端口转发、shell编程等 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-09-29 - **Last Updated**: 2022-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SocketServerC++ #### 介绍 - 基于C/C++底层socket实现并发网络服务器 - 主要实现了HttpServer,能应付上百并发量,实测时并发量在100是毫无问题的,当并发量升至120时程序就会闪退,我也没有找到什么错误 - 如图所示为并发量100压力测试10s,总共通信668次,平均每次通信传输130792字节数据,平均每秒通信66.7999次,平均每次通信历时0.787976ms,通信最长、最短历时分别为24.959ms、0.021ms,通信成功共计668次: ![输入图片说明](resource/images/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95%E7%BB%93%E6%9E%9C.png) - 如图所示为并发量100压力测试100s,可以看到共通信7298次,通信成功7297次,1次超时,性能还算不错: ![输入图片说明](resource/images/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%952.png) - 至于并发量到达120程序即会闪退,我猜测是有系统信号终结了进程 - 参考了一个开源项目(https://gitee.com/ma_yidan/NetServer )的实现逻辑,在此基础上: + 优化拆分了一些非必要的类结构以便于理解和优化程序设计 + 重构了大量的实现方式以用于拓展服务 + 添加了详尽的注释 + 设计了基于高级服务的函数注册绑定的连接复用模式(最近对C++的特性了解加深,发现这种实现模式其实属于反射机制) + 添加了端口代理映射服务、文件单例模式类型识别、非网站式高级服务(例如:文件传输服务ResourceService) - 在此开源我参考开源代码改写的服务器1.0版本,因为运行性能不稳定,我建议对该项目尽量报以参考学习的目的,而非应用于生产环境 - 欢迎感兴趣的童鞋参阅我写的脏代码,希望有同学在我写的东西里能有所获,当然了,找到我写的bug也是一种收获不是 #### 用法 - services目录下每一个子目录都是一类服务,all包含了http服务、resources服务(文件下载服务),portproxy为端口转发服务 - 运行前你可以在cpp文件里修改port参数自定义运行端口,如果是一些特殊端口如80端口,在编译完成后需要以管理员权限启动服务 - 以启动HttpService为例: 1. 在HttpService目录下新建out目录(可以执行mkdir out) ![输入图片说明](resource/images/mkdir_out%E6%BC%94%E7%A4%BA.png) 2. 依次执行:cd out 、cmake .. 、make 三个命令,后两个命令分别编译CmakeLists文件和makefile文件生成服务器可执行文件server ![输入图片说明](resource/images/%E7%BC%96%E8%AF%91%E6%BC%94%E7%A4%BA.png) 3. 执行./server即可启动服务,如果是运行在80端口则需要执行:sudo ./server并输入超级用户密码才能启动服务否则可能报权限不足错误或段错误 4. 启动后根据ip即可访问,其他服务有的需要在url里指定为:http://localhost:port/服务名/函数名 进行服务映射才能访问