资讯专栏INFORMATION COLUMN

TinyWeb--C++构建高性能Web服务器

Yumenokanata / 1866人阅读

摘要:构建高性能服务器前言一想法一直想用做个项目,因为比较喜欢网络通信这部分,又让事情变得更有些挑战性,我最终选择实现一个高性能的服务器。

C++构建高性能Web服务器——Step 0:前言 一、想法:

一直想用C++做个项目,因为比较喜欢网络通信这部分,又让事情变得更有些挑战性,我最终选择实现一个高性能的Web服务器。

在宏观上我希望TinyWeb能够这样:

配置简单

扩展容易

性能高效

功能强大

并希望在开发的过程中能够掌握以下知识:

Unix环境编程的技能

Unix网络编程的技能

巩固C++11知识

掌握构建大型C++项目的技能

掌握多进程、多线程同步、通信机制

实现高性能可复用Memory-pool

掌握基本的数据结构(红黑树、链表、Hash)

能够把通用的网络部分作为多带带的网络库、为以后网络开发提升效率

TinyWeb 目前的功能是:

基本的Web服务,只能提供静态网页服务。

单进程+Reactor+非阻塞方式运行

只能用于Linux系统,不专注跨平台

基本的Web服务配置

TinyWeb 目前的发展计划:

使用进程池的方式提高并发性

强有力的支持多种版本Http协议

负载均衡功能

代理功能


二、设计思想 1. 网络中最麻烦的是如何处理阻塞的事件:
如果IO事件没有发生,系统阻塞的等待IO事件发生,那么CPU就被
浪费了,为实现高并发,不能让进程阻塞,CPU等待IO事件.
借助Linux高效的Epoll机制,

至于为何使用Epoll,而不使用Select或Poll,点这里看看吧.

2.为了提高并发性:到底是选择多进程还是多线程模式

多进程与多线程各有优缺点,并且大部分是互补的,具体就不再赘述了,
详情请戳这里
我选择多进程的原因是:

安全性高,一个进程崩溃不会影响别的进程

容易调试,不易造成死锁

有较为成熟的进程间通信同步机制(共享内存,信号,文件锁,socketpair....)

在接受客户端连接的时候,如何再去创建一个进程,效率低下.故因此采用进程池的方式:
Master进程为父进程,主要控制子进程的状态;可动态配置数量的Slave子进程,用于接受连接,
处理Http逻辑.

3.C++最难管理的还是内存
为了方便的进行内存管理,我设计了一个内存池,不会产生大量的内存碎片,性能待测试.以后还会
介绍如何实现的,尽请期待.
4.进程间通信的方式很多,到底选择哪几个

了解了下Nginx,有考虑了使用的复杂度,我决定使用这几个通信.同步机制

原子操作

信号量

消息队列

共享内存

信号


三、源码

想要源代码的请戳这里,希望大家多多对代码风格做出评判,毕竟自己只是个大三的学生.


四、参考文献

小伙伴想要了解更多的高性能的网络编程,推荐一个大神的专栏

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41405.html

相关文章

  • TinyWeb--C++构建性能Web务器

    摘要:构建高性能服务器前言一想法一直想用做个项目,因为比较喜欢网络通信这部分,又让事情变得更有些挑战性,我最终选择实现一个高性能的服务器。 C++构建高性能Web服务器——Step 0:前言 一、想法: 一直想用C++做个项目,因为比较喜欢网络通信这部分,又让事情变得更有些挑战性,我最终选择实现一个高性能的Web服务器。 在宏观上我希望TinyWeb能够这样: 配置简单 扩展容易 性能...

    shengguo 评论0 收藏0
  • Vue 2019开发者图谱

    摘要:为了便于您更清晰的理解的体系架构,在这里我将为您展示年开发者知识图谱,它包含了所有开发过程中的关键部分。在数据展示前端导入导出图表面板数据绑定等场景无需大量代码开发和测试,可极大节省企业研发成本并降低交付风险。 作为 Vue 的初学者,您或许已经听过很多关于它的专业术语了,例如:单页面应用程序、异步组件、服务器端呈现等,您可能还听过和Vue经常一起被提到的工具和库,如Vuex、Webp...

    cgspine 评论0 收藏0
  • 前端每周清单半年盘点之 React 与 ReactNative 篇

    摘要:前端每周清单半年盘点之与篇前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。与求同存异近日,宣布将的构建工具由迁移到,引发了很多开发者的讨论。 前端每周清单半年盘点之 React 与 ReactNative 篇 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为...

    Barry_Ng 评论0 收藏0
  • 前端每周清单第 54 期: SwiftNIO, 自定义 vue-router, Web 缓存与 Gr

    摘要:新闻热点国内国外,前端最新动态苹果开源了版近日,苹果开源了一款基于事件驱动的跨平台网络应用程序开发框架,它有点类似,但开发语言使用的是。苹果称的目标是帮助开发者快速开发出高性能且易于维护的服务器端和客户端应用协议。 showImg(https://segmentfault.com/img/remote/1460000013677379); 前端每周清单专注大前端领域内容,以对外文资料的...

    刘东 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<