TinywebServer知识点(2)
TinywebServer知识点(2)原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
目前需要进一步补充学习的知识点:
数据库
C++设计模式
一、代码架构1.项目框架
2.编译运行在ubuntu下,打开TinyWebServer-master目录,终端运行
1$ sh ./build.ch
或者直接终端运行
1make ./server
上面两个都可以编译程序代码
终端输入ifconfig查看服务器本机ip,服务器程序的默认端口号为9006
在浏览器中使用如下,即可访问服务器
1ip:Port 如: 192.168.126.128:9006
3.服务器运行时流程图
二、HTTP介绍1.HTTP报文(1)请求报文HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成有。两种请求报文
请求行,用来说明请求类型(方法),要访问的资源以及所使用的HTTP版本
请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
空行,请求头部后面的空行是必须的即使第四部分的请求数 ...
TinywebServer知识点(1)
TinywebServer知识点(1)原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、套接字相关1.为什么服务端套接字ip绑定为0.0.0.0
监听所有网络接口:绑定到0.0.0.0意味着服务器将监听所有可用的网络接口。不论客户端通过哪个IP地址与服务器通信,服务器都能接收到请求。这对于具有多个网络接口或希望接受来自不同子网请求的服务器非常有用
简化配置:通过绑定0.0.0.0,开发者不需要明确指定某一个IP地址,这样可以避免在配置时出错,也方便了服务器在不同环境中的部署。例如,从开发环境到生产环境,可能会有不同的IP地址,通过绑定0.0.0.0可以减少配置的修改
提高灵活性:绑定0.0.0.0使得服务器具有更高的灵活性,可以同时处理来自不同网络的请求,例如本地网络、公司内部网络或互联网
上面提到的网络接口,指代的是网卡设备,每个网络接口代表一个可以接收和发送网络流量的硬件设备或虚拟设备:
物理网卡设备:这些是服务器上实际存在的硬件设备,如以太网卡、无线网卡等。每个物理网卡通常都有一个唯一的MAC地址和一个分配的IP地址
虚拟网络接口:在一些服务器上,除了物理 ...
牛客WebServer项目实战
牛客WebServer项目实战本章内容,为牛客上WebServer项目的相关知识点,该部分内容也是与本项目TinyWebServer息息相关的
一、知识点1.异步IO异步 I/O(输入/输出)是一种允许程序在等待 I/O 操作完成的同时继续执行其他任务的技术。这种方式提高了程序的效率和响应性,尤其是在涉及大量或慢速 I/O 操作时(如网络通信、大文件操作等)
工作原理:
在同步 I/O 操作中,应用程序发出 I/O 请求后必须等待操作完成才能继续执行。这种方式可能导致程序在等待期间资源被闲置。相比之下,异步 I/O 允许应用程序在发出 I/O 请求后立即继续执行。当 I/O 操作完成时,程序通过回调函数、事件、信号或轮询等机制得到通知
(1)IO多路复用是同步的同步与异步
同步I/O(Synchronous I/O):程序执行操作时会阻塞,直到I/O完成。同步I/O的例子包括常规的读写操作,直到数据被实际读取或写入,调用才返回。
异步I ...
高性能网络模型
高性能网络模型一、Reactor模型reactor设计模式是event-driven architecture的一种实现方式,处理多个客户端并发的向服务端请求服务的场景。每种服务在服务端可能由多个方法组成。reactor会解耦并发请求的服务并分发给对应的事件处理器来处理。目前,许多流行的开源框架都用到了reactor模式,如:netty、node.js等
大佬博客入口
这里说明多Reactor多线程的模式
1.多Reactor多线程的模式
方案详细说明:
主线程中的 MainReactor 对象通过 select 监控连接建立事件,收到事件后通过 Acceptor 对象中的 accept 获取连接,将新的连接分配给某个子线程
子线程中的 SubReactor 对象将 MainReactor 对象分配的连接加入 select 继续进行监听,并创建一个 Handler 用于处理连接的响应事件
如果有新的事件发生时,SubReactor 对象会调用当前连接对应的 Handler 对象来进行响应
Handler 对象通过 read -> 业务处理 -> send 的流程来完 ...
Linux基础
Linux基础该文章转自:爱编程的大丙
一、GCC1.GCC工作流程GCC编译器对程序的编译,分为 4 个阶段:预处理(预编译)、编译和优化、汇编和链接。GCC 的编译器可以将这 4 个步骤合并成一个,其中每个步骤的工作如下:
预处理: 主要做了三件事: 展开头文件 、宏替换 、去掉注释行;这个阶段需要GCC调用预处理器来完成, 最终得到的还是源文件, 文本格式
编译: 这个阶段需要GCC调用编译器对文件进行编译, 最终得到一个汇编文件
汇编: 这个阶段需要GCC调用汇编器对文件进行汇编, 最终得到一个二进制文件
链接: 这个阶段需要GCC调用链接器对程序需要调用的库进行链接, 最终得到一个可执行的二进制文件
在Linux系统下,可以通过GCC指令直接操作一个.c源文件,可以之间编译为一个可执行的二进制文件,如gcc main.c -o main会生成一个main的可执行文件
也可以使用gcc 带参数的命令分开执行上述四个步骤,如下:
main.c
12345678#include <stdio.h>#include <stdlib.h>int ma ...