超级课表
項(xiàng)目整體介紹
項(xiàng)目功能:
- 注冊(cè)用戶
- 注冊(cè)用戶需要提供學(xué)校,專業(yè),姓名
- 登錄用戶
- 登錄用戶需要提供之前注冊(cè)的學(xué)校,專業(yè),姓名
- 查詢課表
- 查詢課表需要輸入學(xué)校,專業(yè),班級(jí)(班級(jí)中包括了年級(jí),例:151就是15級(jí)1班)
項(xiàng)目模塊:
- 1.HTTP服務(wù)器框架
- 2.業(yè)務(wù)實(shí)現(xiàn)
- 1.爬學(xué)校的網(wǎng)站
- 2.數(shù)據(jù)庫(kù)操作
- 3.頁(yè)面制作
一.多線程HTTP服務(wù)器框架
1.1 讀取請(qǐng)求并解析
1.1.1 解析首行(從socket中讀取到數(shù)據(jù)按空格且切分)
- 解析方法:切分出來的第一部分就是方法
- 解析出URL
- 解析URL中的path
- 解析出query_string
1.1.2 解析heade
- 解析出Content_Length
- 解析出Content_Type
1.1.3 解析header
- 請(qǐng)求都是表單形式所以按照表單格式解析
1.2 計(jì)算請(qǐng)求計(jì)算響應(yīng)并寫回客戶端
1.2.1 處理靜態(tài)頁(yè)面
寫一個(gè)HTML文
1.2.2 處理動(dòng)態(tài)頁(yè)面
根據(jù)頁(yè)面輸入?yún)?shù)不同返回不同頁(yè)面使用了CGI技術(shù)
CGI技術(shù)(通用網(wǎng)關(guān)接口,一種協(xié)議,一種標(biāo)準(zhǔn))
CGI技術(shù)功能: 讓HTTP服務(wù)器的底層框架和上層應(yīng)用解耦合
CGI技術(shù)優(yōu)點(diǎn):對(duì)編程語言的要求低(只要可以訪問標(biāo)準(zhǔn)輸入輸出就可以(SQL語言不能訪問標(biāo)準(zhǔn)輸入輸出))
CGI技術(shù)缺點(diǎn):進(jìn)程的頻繁創(chuàng)建銷毀效率低(進(jìn)程池,FastCGI)
- 服務(wù)器創(chuàng)建子進(jìn)程
- 子進(jìn)程進(jìn)行程序替換(替換為url_path指定的可執(zhí)行程序即 CGI程序)
- CGI程序:根據(jù)業(yè)務(wù)的具體需要,獲取到用戶輸入的參數(shù)并進(jìn)行動(dòng)態(tài)頁(yè)面的計(jì)算
- 子進(jìn)程是通過匿名管道+環(huán)境變量獲取到用戶輸入的參數(shù)
- 子進(jìn)程進(jìn)行重定向(把標(biāo)準(zhǔn)輸入輸出匿名管道的讀端)
- 子進(jìn)程通過匿名管道(匿名管道的寫端)把計(jì)算得到的動(dòng)態(tài)HTML寫會(huì)父進(jìn)程
- 父進(jìn)程拿到子進(jìn)程結(jié)果后拼裝出一個(gè)HTTP響應(yīng)
- 把響應(yīng)寫回socket中
二.業(yè)務(wù)實(shí)現(xiàn)
2.1 爬取有用信息
2.1.1借助libcurl第三方庫(kù)實(shí)現(xiàn)獲取網(wǎng)頁(yè)的功能
- 輸入目標(biāo)是URL
輸出結(jié)果是html
使用1.初始化句柄(curl_easy_init())
- 2.設(shè)置響應(yīng)如何處理
- 3.發(fā)送請(qǐng)求
4.清理對(duì)象
2.2.2解析html文件解析出HTML中需要的專業(yè),班級(jí),課表
- 將解析出來的結(jié)果寫進(jìn)數(shù)據(jù)庫(kù)之中的專業(yè),班級(jí)寫入學(xué)校表
- 將解析出來的課表寫入課表中
2.2數(shù)據(jù)庫(kù)操作
2.2.1 注冊(cè)實(shí)現(xiàn)
- 獲取到用戶定義的參數(shù)
- 解析獲取到的參數(shù)
- 將獲取到的參數(shù)插入數(shù)據(jù)庫(kù)之中
2.2.2登錄實(shí)現(xiàn)
- 獲取到參數(shù)(方法,query_string,body)
- 獲取到Content_Length,再?gòu)臉?biāo)準(zhǔn)輸入中讀取body
- 解析讀取到的數(shù)據(jù)
- 將讀取到的數(shù)據(jù)拼裝到查詢SQL語句中
- 執(zhí)行查詢語句對(duì)學(xué)校表中的數(shù)據(jù)進(jìn)行查找,
- 找到了就跳轉(zhuǎn)至搜索頁(yè)面
- 找不到就跳轉(zhuǎn)至注冊(cè)頁(yè)面
2.2.3 查詢實(shí)現(xiàn)
- 獲取到參數(shù)(方法,query_string,body)
- 獲取到Content_Length,再?gòu)臉?biāo)準(zhǔn)輸入中讀取body
- 解析讀取到的數(shù)據(jù)
- 將讀取到的數(shù)據(jù)拼裝到查詢SQL語句中
- 執(zhí)行查詢語句對(duì)課表中的數(shù)據(jù)進(jìn)行查找,
- 找到了就講課表打印出來
- 找不到就提示用戶占時(shí)沒有該課表
總結(jié)
- 上一篇: 2.6 zio入门——对比Future
- 下一篇: wind 10 安装node环境