MySQL-CGI-响应报文

账号密码涉及到:

与数据库已记录下来的进行校验。

如果也是来一个新建一个连接,必然效率低。

可以做一个数据库连接池,预生成数据库连接。

如何生成数据库连接?下面的流程做很多次。

然后放在链表中,(池))维护三个变量 最大连接数 可用连接数 当前已用连接数 (要上锁)

1.使用mysql_init()初始化

2.使用real_connect()建立连接

3.使用query()查询

4.使用store_result(mysql)获取结果集

5.使用num_fields(result)获取查询的列 同理行

6.使用fetch_row不断获取下一行,循环输出

7.free可以释放

8.close可以关闭

CGI校验(通用网关接口):

输密码--POST--query()--同步线程校验

而CGI是一个服务器上的程序(.cgi)

项目中有个sign.cpp就是CGI程序

把用户名和密码保存在txt文件中--->

把数据库的用户名和密码存在map中用于校验-->

主程序有命令语句来执行CGI校验,不直接返回响应

HTTP响应报文

若目标文件存在、对所有用户可读且不是目录时,则使用mmap将其映射到内存地址m_file_address处,并告诉调用者获取文件成功FILE_REQUEST。

接下来要做的就是根据读取结果对用户做出响应了,也就是到了process_write(read_ret);这一步,该函数根据process_read()的返回结果来判断应该返回给用户什么响应,假设用户请求的文件存在,而且已经被mmap到m_file_address这里了,那么我们就将做如下写操作,将响应写到这个connfd的写缓存m_write_buf中去:

首先将状态行写入写缓存,响应头也是要写进connfd的写缓存(HTTP类自己定义的,与socket无关)中的,对于请求的文件,我们已经直接将其映射到m_file_address里面,然后将该connfd文件描述符上修改为EPOLLOUT(可写)事件,然后epoll_Wait监测到这一事件后,使用writev来将响应信息和请求文件聚集写到TCP Socket本身定义的发送缓冲区中,交由内核发送给用户。

相关推荐
阿维的博客日记4 小时前
Redis的旁路缓存策略和先删除缓存后更新数据库,先更新数据库后删除缓存,这三种策略之间有什么关系??
数据库·redis·缓存
ictI CABL4 小时前
redis连接服务
数据库·redis·bootstrap
苍煜4 小时前
SpringBoot单体应用到分布式下的数据库锁、事务、Redis事务、分布式锁、分布式事务协调
数据库·spring boot·分布式
xmjd msup5 小时前
mysql的分区表
数据库·mysql
Lyyaoo.5 小时前
【JAVA Spring面经】Spring 事务失效情况
java·数据库·spring
MeAT ITEM5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dovens5 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.15 小时前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库
Rick19935 小时前
mysql 慢查询怎么快速定位
android·数据库·mysql
科技小花12 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化