mochiweb原始碼分析(七)
前面說到了filelib:is_dir這函式,如果是目錄,則執行true流程,進入mochiweb_request:maybe_redirect/4這函式
然後根據第一個引數是否是[],呼叫不同的分支
回到之前說的true、false判斷,如果是檔案,則呼叫mochiweb_request:maybe_serve_file/3
首先:LastModified = httpd_util:rfc1123_date(FileInfo#file_info.mtime),這裡根據讀取到的檔案資訊中的最後一次寫的時間,來生成一個rfc1123 date
獲取到日期以後,接著呼叫:mochiweb_request:get_header_value/2函式傳遞頭部資訊判斷日期是否已存在.
若存在返回304程式碼,304程式碼解釋如下:
HTTP 304 Response 當一個客戶端(通常是瀏覽器)向web伺服器傳送一個請求,如果web伺服器返回304響應,則表示此請求的本地快取是最新的,可以直接使用
如不存在則開啟檔案mochiweb_request:ok/2是用響應狀態行、響應頭部、空行和訊息體組成響應報文發給客戶端。
相關推薦
mochiweb原始碼分析(七)
前面說到了filelib:is_dir這函式,如果是目錄,則執行true流程,進入mochiweb_request:maybe_redirect/4這函式 然後根據第一個引數是否是[],呼叫不同的分支 回到之前說的true、false判斷,如果是檔案,則呼叫mochiweb_reque
Flume NG原始碼分析(七)ChannelSelector
前幾篇介紹了Flume NG Source元件的基本情況,接下來看看Channel相關的元件,Channel相關元件有: 1. Channel 2. ChannelSelector 3. Interceptor / InterceptorChain 4. ChannelProcess
mochiweb原始碼分析(五)
1.接著前面講解的生成Req物件,看new_request/4的函式,這裡主要是儲存請求行資訊和請求頭部。 {packet, raw}是不設定訊息打包規則,如果{packet, 1|2|4},則表示每一個包都會帶上一個N(1,2或4)位元組長的長度計數。
mochiweb原始碼分析(八)
前面說到了mochiweb_request:ok/2這個函式,接下來說下里面的response/3這個函式 Length是讀寫裝置讀寫資料的位元組數長度, Response是呼叫start_response_length/2函式 由註釋可以看出start_response_l
Libevent原始碼分析(七)--- IOCP
event_base中有一個iocp變數,event_base的初始化函式中會呼叫event_base_start_iocp開啟iocp功能,event_base_start_iocp又會呼叫event_iocp_port_launch來初始化IOCP:
ZMQ原始碼分析(七) --程序內通訊
之前兩節分析了zmq的tcp通訊流程,除了tcp之外,zmq還支援許多其他的通訊模式,比如inproc,ipc,pgm,epgm,tipc等。這一節接著分析inpro,即程序內通訊。 和tcp通訊相比,程序內通訊要簡單許多,因為不涉及到遠端連線的認證以及資料的
Tomcat原始碼分析 (七)----- Tomcat 啟動過程(二)
在上一篇文章中,我們分析了tomcat的初始化過程,是由Bootstrap反射呼叫Catalina的load方法完成tomcat的初始化,包括server.xml的解析、例項化各大元件、初始化元件等邏輯。那麼tomcat又是如何啟動webapp應用,又是如何載入應用程式的ServletContextListe
mybatis 原始碼分析(七)KeyGenerator 詳解
一、KeyGenerator 概述 在平時開發的時候經常會有這樣的需求,插入資料返回主鍵,或者插入資料之前需要獲取主鍵,這樣的需求在 mybatis 中也是支援的,其中主要的邏輯部分就在 KeyGenerator 中,下面是他的類圖: 其中: NoKeyGenerator:預設空實現,不需要對主鍵單獨處
Netty原始碼分析 (七)----- read過程 原始碼分析
在上一篇文章中,我們分析了processSelectedKey這個方法中的accept過程,本文將分析一下work執行緒中的read過程。 private static void processSelectedKey(SelectionKey k, AbstractNioChannel ch) {
HLS學習(七)HLSDownloader原始碼分析(6)下載TS檔案片段
下載TS檔案片段 處理完Master PlayList和Media PlayList之後就可以開始下載TS視訊片段了 下載的流程如下: 1、初始化本地的檔名 2、設定本地檔案的訪問許可權 3、建立任務佇列 4、建立PlayList更新執行緒,因為伺服器上的m3u8檔案
Mybaits 原始碼解析 (七)----- Select 語句的執行過程分析(下篇)全網最詳細,沒有之一
我們上篇文章講到了查詢方法裡面的doQuery方法,這裡面就是呼叫JDBC的API了,其中的邏輯比較複雜,我們這邊文章來講,先看看我們上篇文章分析的地方 SimpleExecutor 1 public <E> List<E> doQuery(MappedStatement m
【OpenGL】Shader實例分析(七)- 雪花飄落效果
mouse llb cto 接下來 pix lan details effect art 轉發請保持地址:http://blog.csdn.net/stalendp/article/details/40624603 研究了一個雪花飄落效果。感覺挺不錯的。分享給大家,效
JStorm與Storm源碼分析(七)--BasicBoltExecutor與裝飾模式
clean 規範 tco exe -418 orm框架 bsp ide per 在Storm中IBasicBolt的主要作用是為用戶提供一種更為簡單的Bolt編寫方式,更為簡單體現在Storm框架本身幫你處理了所發出消息的Ack、Fail和Anchor操作,而這部分操作是由
Android ADB 原始碼分析(三)
前言 之前分析的兩篇文章 Android Adb 原始碼分析(一) 嵌入式Linux:Android root破解原理(二) 寫完之後,都沒有寫到相關的實現程式碼,這篇文章寫下ADB的通訊流程的一些細節 看這篇文章之前,請先閱讀 Linux的SOCKET
Mybatis 原始碼分析(2)—— 引數處理
Mybatis對引數的處理是值得推敲的,不然在使用的過程中對發生的一系列錯誤直接懵逼了。 以前遇到引數繫結相關的錯誤我就是直接給加@param註解,也稀裡糊塗地解決了,但是後來遇到了一些問題推翻了我的假設:單個引數不需要使用 @param 。由此產生了一個疑問,Mybatis到底是怎
Mybatis 原始碼分析(9)—— 事物管理
Mybatis 提供了事物的頂層介面: public interface Transaction { /** * Retrieve inner database connection * @return DataBase connection * @throw
Mybatis 原始碼分析(8)—— 一二級快取
一級快取 其實關於 Mybatis 的一級快取是比較抽象的,並沒有什麼特別的配置,都是在程式碼中體現出來的。 當呼叫 Configuration 的 newExecutor 方法來建立 executor: public Executor newExecutor(Transac
Mybatis原始碼分析(7)—— 結果集處理
解析封裝 ResultMap 是和結果集相關的東西,最初在解析 XML 的時候,於 parseStatementNode 方法中,針對每一個 select 節點進行解析,轉換為 MappedStatement(類似 Spring 的 bean 配置和 BeanDefinition 的
Mybatis原始碼分析(6)—— 從JDBC看Mybatis的設計
Java資料庫連線,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規範客戶端程式如何來訪問資料庫的應用程式介面,提供了諸如查詢和更新資料庫中資料的方法。 六步流程: 載入驅動(5.x驅動包不需要這步了) 建立
Mybatis原始碼分析(5)—— 外掛的原理
MyBatis 允許你在已對映語句執行過程中的某一點進行攔截呼叫。 預設情況下,可以使用外掛來攔截的方法呼叫包括: Executor (update, query, flushStatements, commit, rollback, getTransaction, cl