Linux下Web服务器开发

本教程详细介绍了如何使用C++在Linux环境下开发Web服务器,涉及kqueue IO复用机制、HTTP协议、C++面向对象编程以及项目实现过程。内容涵盖实验说明、项目需求、知识点、程序设计与实现等,提供了完整的代码下载链接和学习提示,旨在帮助学习者掌握Web服务器开发技能。
摘要由CSDN通过智能技术生成
代码下载地址:http://download.csdn.net/detail/u010959074/9572149
以下是项目介绍。
学习提示:

1. 桌面环境中动手练习,若环境不流畅可选择WebIDE或字符界面。

2. 在教程下方课程问答中提出问题,或共享桌面寻求远程帮助。

3. 在教程下方实验报告中完成作业,记录心得。公开报告可以获得大家点评。

4. 我的代码库中用GIT提交你的实验代码。

Web服务器

The way to learn a programming language is to write programs.

这门项目训练营最大的价值是实验楼和教师共同提供的教学服务,目的只有一个:让你把项目做出来并完全理解。所以请对自己负责,提出你遇到的任何问题,完成项目,你所花费的时间才有价值!

一、实验说明

欢迎参加C++语言经典项目实战训练营,在四周的时间里我们将一起完成四个小型及中型C++语言项目,涉及到C++语言技术的多方面。为了你能够有所收获,学习过程中务必注意:

进度很重要:必须跟上每周的进度,项目,问答。我们会认真对待每一位参与训练营的同学,请你不要因为困难半途而废。

问答很重要:遇到知识难点请多多提问,这是你的权利更是对自己负责的义务。

实践很重要:完成每周项目,解决项目中出现的一切问题。项目都提供完整的代码,但仅供学习中参考,应按照实验文档的思路自己实现,请勿直接拷贝代码。

实验报告很重要:详细记录你完成项目任务和解决问题的思路。

反馈很重要:请务必将你对课程的建议告诉我们,不同于视频,我们的文档可以很快更新升级以满足你的学习需求。

代码练习说明

实验楼环境使用GCC/G++ 4.8.4 编译环境。C++代码采用C++11标准。编写可以使用vim或gedit,并使用Git进行代码管理,实验报告需要以Markdown格式编写并公开。

这些技术都是很多程序员工作中天天用到的,如果你对其中任何知识不熟悉,可以先学习课程:

Linux基础入门

Vim编辑器

Git与实验楼代码库

Markdown与实验报告

如果需要保存代码到我的代码库,则需要用到git,目前实验楼的代码库可以在实验环境或者你自己的电脑上提交,请务必注意git push时输入的用户名是你登陆实验楼的邮箱(不是你代码库用户名),如果你是第三方登陆的,则需要先更新邮箱及登录密码后才可以在实验楼外部使用。

程序编写与编译最基本的方法(#标志后为注释):

# 打开桌面上的Xfce终端并执行后续命令# 进入到/home/shiyanlou目录cd /home/shiyanlou# 创建并打开源文件hello.cpp

gedit hello.cpp# 在gedit(类似windows上的记事本)中输入代码# 保存退出# 编译hello.cpp

g++ -std=c++11 hello.cpp -o hello# 执行生成的二进制文件

./hello

二、项目简介

1. 介绍

本实验使用 C++ 实现一个Web服务器。

这个项目会学习C++网络开发,kqueue IO复用机制,熟悉Linux下的C++程序编译方法,Makefile编写。

本节实验项目比较复杂,提供的示例代码接近3000行,但代码逻辑简单,难点在kqueue IO复用机制的理解,尽量独立实现,遇到难点可以参考示例代码或到实验楼问答中提问。

2. 项目需求

编写一个Web服务器,程序具备的基本功能:

支持多个客户端连接

支持HTTP协议中的GETHEADOPTION三个方法

支持通过浏览器访问多种类型的文件资源

支持多虚拟主机,每个虚拟主机可以配置独立的资源池

3. 知识点

本实验实践的知识点包括:

C++ 面向对象程序设计

基本的Makefile

C++ 网络编程

kqueue IO复用机制

HTTP 协议基础

4. 项目效果图

程序运行的截图如下所示:

5. 项目完整代码

项目完整代码可以通过wget下载获得:

# 下载程序代码wget http://labfile.oss.aliyuncs.com/courses/454/webserver.zip

# 解压代码

unzip webserver.zip

# 进入代码文件夹查看

cd webserver

三、程序设计与实现

3.1 需求分析

大家平时上网时,浏览器中显示的HTML网页都是来源自Web服务器。本项目通过一个实例介绍如何实现一个简单的Web服务器。

本项目中实现的Web服务器需要支持下面几个功能:

支持多个客户端连接

支持HTTP协议中的GETHEADOPTION三个方法

支持通过浏览器访问多种类型的文件资源

支持多虚拟主机,每个虚拟主机可以配置独立的资源池

实现具备这些基本功能的Web服务器,我们首先需要了解HTTP协议以及IO复用机制,在上一节的项目中我们已经学习了一种IO复用方法epoll,本项目采用kqueue机制,与epoll非常类似。

3.2 HTTP协议

HTTP协议介绍的好文章非常多,这里只列出项目中需要的知识点,推荐大家系统学习HTTP协议,请阅读:

HTTP协议详解

HTTP协议的一个主要特点就是客户端服务器模式,在上一个项目中我们有过介绍,基于socket的连接过程,如果大家没有印象可以去复习下。过程如下:

模型如下:

解释如下:

服务器端:

socket()创建监听Socket

bind()绑定服务器端口

listen()监听客户端连接

accept()接受连接

recv/send接收及发送数据

close()关闭socket

客户端:

socket()创建监听

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值