Skip to content

一个利用C语言编写的HTTP Web服务器。支持静态资源处理,支持HTTP长连接。

Notifications You must be signed in to change notification settings

ReadyH/HTTP-WebServer

Repository files navigation

HTTP WebServer


Intro

本项目是一个利用C语言编写的HTTP Web服务器Demo。支持静态资源处理,实现HTTP长连接。

总体流程

  1. 配置服务器具体参数 port threadNum path pqSize
  2. 注册套接字文件描述符 socket() bind() listen()
  3. 初始化epoll,添加套接字文件描述符
  4. 初始化线程池和定时器
  5. 进入等待请求循环
    • 请求连接
      • 接受连接,返回连接描述符
      • 在epoll中注册连接描述符
      • 添加定时器节点
    • 响应连接
      • 在线程池中处理响应事务
      • 初始化任务节点并加入任务队列 (taskHead)
      • 激活一个等待线程 (pthread_cond_signal)

并发模型

采用Reactor模型,即事件同步循环 + 数据读写非阻塞(non-blocking I/O) + 线程池。

  1. 事件同步循环主要使用epoll模型监控每一个事件,各个事件拥有自己完整的处理流程,使用各自的线程独立执行。之所以同步是因为每个事件的线程直到完成才会返回推出。
  2. 非阻塞I/O指的是各个线程在执行read和write等系统调用时,在数据为准备好的情况下会返回并不断轮询。如果读取出错则推出。
  3. 请求事件到达服务器之后,创建任务并加入线程池,通过工作线程在执行相关操作(worker)。

使用方法

工具和环境

  1. 系统:Ubuntu 18.04 server
  2. 编译器:gcc7.4
  3. 代码编辑器:Visual Studio Code

使用方式

  1. 进入程序所在文件夹
  2. 执行make命令 make
  3. 开启服务器 ./Server
  4. 客户端连接测试
    • 确定服务器ip地址 serverip和端口号port
    • 在浏览器输入 serverip:port

下一步工作

  1. 目前还有不少bug,等待进一步验证和改进
  2. 进行压力测试
  3. 写个好看点的网页

About

一个利用C语言编写的HTTP Web服务器。支持静态资源处理,支持HTTP长连接。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published