东风草堂blog

公众号:来风说


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

C++实现简单的HTTP Server

发表于 2020-03-21 | 更新于: 2022-04-14 | 分类于 libevent |

可以参考下典型的http会话,服务器响应由一系列文本指令组成, 并使用 CRLF 分隔,它们被划分为三个不同的块:

  • 第一行是 状态行,包括使用的HTTP协议版本,状态码和一个状态描述(可读描述文本)。
  • 接下来每一行都表示一个HTTP首部,为客户端提供关于所发送数据的一些信息(如类型,数据大小,使用的压缩算法,缓存指示)。与客户端请求的头部块类似,这些HTTP首部组成一个块,并以一个空行结束。
  • 最后一块是数据块,包含了响应的数据(如果有的话)。

具体实现如下代码,收到postman发过来的消息后,将收到的消息显示出来,并回复状态ok的响应,这就完成了一个最简单的http服务器模型。

阅读全文 »

TCP服务器C语言实现

发表于 2020-03-21 | 更新于: 2022-04-14 | 分类于 libevent |
参考链接:https://www.geeksforgeeks.org/tcp-server-client-implementation-in-c/ 建立HTTP服务器的流程都是一样的,可以参考TCP Server的建立过程,因为Http是基于Tcp协议的,底层的原理都是相通的,参考了man手册大概介绍一下。 创建socket创建socket,此时会返回一个描述符,头文件为#include <sys/socket.h>,函数原型为int socket(int domain, int type, int protocol);,domain参数指明通信将在哪个通信族发生,一般选PF_INET即Iternet版本4协议,socket参数指明通信的类型,可选择SOCK_STREAM/SOCK_DGRAM/SOCK_RAW,SOCK_STREAM类型提供基于序列的,可靠的,双向连接的字节流,可以支持带外数据传输机制,指的是TCP。 SOCK_DGRAM套接字支持数据报(无连接,不可靠的最大固定长度(通常很小)的消息),指的是UDP。 SOCK_RAW套接字提供对内部网络协议和接口的 ...
阅读全文 »

TCP三次握手过程

发表于 2020-03-21 | 更新于: 2023-03-04 | 分类于 libevent |
参考文章:https://www.geeksforgeeks.org/tcp-3-way-handshake-process/https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml 传输控制协议中的TCP三向握手(也称为TCP握手;三消息握手和/或SYN-SYN-ACK)是TCP通过基于Internet协议的网络建立TCP / IP连接的方法。 TCP的三向握手技术通常称为“ SYN-SYN-ACK”(或更准确地说是SYN,SYN-ACK,ACK),因为TCP传输了三种消息来协商和启动两台计算机之间的TCP会话。 TCP握手机制经过设计,因此,尝试进行通信的两台计算机可以在传输SSH和HTTP Web浏览器请求之类的数据之前,协商网络TCP套接字连接的参数。 这也可以看作是建立TCP连接的一种方式。 在进入细节之前,让我们看一些基础知识。 TCP代表传输控制协议,该协议表示它做了一些事情以可靠的方式控制数据的传输。 互联网上设备之间的通信过程根据当前的TCP/IP套件模型(OSI参考模型的精简版 ...
阅读全文 »

libevent实现https服务器

发表于 2020-03-14 | 更新于: 2024-05-23 | 分类于 libevent |
libevent怎么实现https服务器?
阅读全文 »

2020重新开始

发表于 2020-03-12 | 更新于: 2022-04-14 | 分类于 感悟 |
这是一篇加密文章,内容可能是个人情感宣泄或者收费技术。如果你确实想看,请与我联系。
阅读全文 »

leetcode-动态规划题型

发表于 2020-03-05 | 更新于: 2023-10-14 |
动态规划是一种解决问题的算法策略,它通常用于解决涉及最优化问题的情况,比如找到最短路径、最大价值等等。动态规划算法的核心思想是将一个大问题分解成一系列小问题,并记住已经解决的小问题的答案,以避免重复计算。这种方法有助于提高计算效率。 动态规划的一般步骤如下: 定义问题: 首先,将大问题分解成小问题,并明确定义每个小问题的状态。这些状态是问题的不同方面,通常与问题的输入相关。 找到递推关系: 接下来,确定每个状态如何与其他状态相关联。这通常通过递推关系或方程式来完成,它们描述了一个状态如何由一个或多个先前状态计算得出。 初始化: 对于问题中的一些状态,需要初始化其初始值,以便递推关系可以开始工作。 计算和记忆: 使用递推关系,从最小的状态开始,逐步计算并记住每个状态的值。这些值可以保存在表格、数组或字典中,以便后续使用。 解决大问题: 通过计算小问题的值,最终可以解决整个大问题。这通常是在表格中找到最终状态的值,然后根据需要提取答案。 优化: 可能需要进一步优化算法以减少内存和时间的消耗。 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一 ...
阅读全文 »

pegasus项目记录

发表于 2020-03-04 | 更新于: 2023-03-07 |
Table的管理在Pegasus里,table相当于一个namespace,不同的table下可以有相同的(HashKey, SortKey)序对。在使用table前,需要在向MetaServer先发起建表的申请。 MetaServer在建表的时候,首先对表名以及选项做一些合法性的检查。如果检查通过,会把表的元信息持久化存储到Zookeeper上。在持久化完成后,MetaServer会为表中的每个分片都创建一条记录,叫做PartitionConfiguration。该记录里最主要的内容就是当前分片的version以及分片的composition(即Primary和Secondary分别位于哪个ReplicaServer)。 在表创建好后,一个分片的composition初始化为空。MetaServer会为空分片分配Primary和Secondary。等一个分片有一主两备后,就可以对外提供读写服务了。假如一张表所有的分片都满足一主两备份,那么这张表就是可以正常工作的。 如果用户不再需要使用一张表,可以调用删除接口对Pegasus的表进行删除。删除的信息也是先做持久化,然后再异步的将删除信 ...
阅读全文 »

菜谱大全

发表于 2020-02-18 | 更新于: 2023-03-07 |
汤萝卜丝鲫鱼 鲫鱼改花刀,准备姜葱。 将萝卜丝加入白砂糖煮3分钟去除涩味。 加入油盐和姜,将鲫鱼放入锅中煎至两面金黄。 将煎好的鱼加入开水煮,煮至汤变白再加入盐、萝卜丝小火慢煮。 加入煎蛋提鲜。 炒菜腊肉萝卜丝 白萝卜切丝 腊肉水煮切片,炒熟后加入萝卜丝 加入生抽炒香
阅读全文 »

深入理解C++11:C++11新特性解析与应用

发表于 2020-02-17 | 更新于: 2023-09-17 |
稳定性与兼容性断言123456789101112131415#ifdef NDEBUG#define assert(expr) (static_cast<void>(0))#else#endif#ifndef _COMPLEX_H#error "Nerver use <bits/cmathcalls.h> directly; include <complex.h> instead."#endif// 静态断言的实现#define assert_static(e) \ do { \ enum { assert_static__ = 1/(e) }; \ } while (0)// do while这样写可以避免if没有加括号而出现匹配异常的情况 异常如果noexcept修饰的函数抛出了异常,编译器可用选择直接调用std::terminate()函数来终止程序的运行,如析构函数不应该抛出异常,所以默认是noexcept(true)。在c++98中,使用throw()来声明不抛出异常的 ...
阅读全文 »

办公软件推荐

发表于 2020-02-16 | 更新于: 2023-03-07 |
ditto,记录复制信息,不需要重复复制。snipaste,截图可以定在窗口,不需要来回切页面。vscode:tabnine插件提示代码,设置自动换行”editor.wordWrap”: “on”.
阅读全文 »
1…121314…18
nephen

nephen

173 日志
16 分类
64 标签
GitHub E-Mail
友情链接
  • 新建留言板
  • 订阅号留言板(旧)
  • 订阅号留言板(新)
  • 山楂岛秘密花园
  • 代发短信
© 2016 — 2024 nephen
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
粤ICP备2022125614号-1
本站访客数 人次 本站总访问量 次