squid請求處理流程

1、客戶端和squid建立連接(client-side模塊、clientBeginRequest()函數);

2、檢查ACL訪問控制;

3、檢查重定向;

4、檢查緩存命中(GetMoreData()函數),寫入StoreEntryclient-side模塊);

4.1、命中(client-side模塊);

4.2、未命中(rotoDispatch()函數啓動peer算法,算法檢查never|always_direct);

5、收到ICP響應,選擇中止,轉發請求(protoStart()函數);

6、打開到源站或peer的連接(HTTP模塊),發起請求(Network Communication模塊),建立連接並處理異常(comm.c程序);

7、建立寫緩存(HTTP模塊),將請求寫入socket;

8、建立相應的socket讀緩存,接受處理HTTP響應(即,如果已有socket,可以跳過6、7步);

9、響應被接受,squid接收到header信息,並在被讀取時把data追加進StoreEntry,同時通知client-side模塊,這個過程的速度取決於delay_pools;

10、client-side模塊從StoreEntry取數據,並寫入客戶端socket;

11、客戶端讀取完成,數據根據情況(refresh、cache)存入磁盤;

12、回源取完數據,標記StoreEntry爲“完成”(client-side模塊),socket關閉或保留到持久連接池;

13、數據寫入客戶端socket完成,從StoreEntry註釋掉client-side模塊,同樣,關閉或等待客戶端連接請求

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章