二、與伺服器建立連線
已經從url中獲得了伺服器的主機名,要能夠從伺服器上獲取網頁內容,還需要客戶端程序與服務端程序建立連線。udp和tcp的通訊採用socket方法實現,socket為程序間通訊提供了端點。通訊由訊息組成,訊息是在乙個程序的socket與另乙個程序socket之間傳送的。如圖3-6所示,乙個程序要能夠接收訊息,它的socket必須繫結到乙個本地埠和本地位址上,傳送到指定internet位址和埠上的訊息,只能被繫結到該位址和埠的socket所屬程序接收。
連線的建立過程是非同步的,如3-7所示,一方在監聽建立連線的請求,一方將發動建立連線的請求。連線一旦被接受,作業系統(例如unix)自動建立新的socket使之與客戶端連線成通訊的通道,這樣服務端可以在原來的socket上繼續監聽其他客戶的請求了。連線建立後雙方程序可以通過建立好的連線進行讀寫操作。
與伺服器建立連線函式 createsocket在http.h中定義,http.cpp中實現。在與伺服器建立連線的時候,使用了非阻塞連線。超過定時,就放棄。具體**可以參看http.h中定義的
int nonb_connect(int, struct sockaddr*,int)函式。
考慮到此函式是為web資訊的蒐集服務設計的,特別增加dns快取和ip範圍控制功能。
增加dns快取的原因:
1)url數以億計,而主機數以百萬計。如果沒有dns快取,蒐集子系統每次蒐集新的url,即使剛在上一次的任務中解析過該主機名,也要重新進行網域名稱解析(除了用ip位址直接表示的主機,如162.105.80.44)。為了避免頻繁的查詢dns伺服器,造成類似於拒絕服務攻擊的***,要建立dns快取。
2)針對小規模的網頁蒐集(如百萬量級),dns快取只需要建立在記憶體中就足夠了,一是因為記憶體占用不多,二是因為網域名稱解析有時效性,即使把這些解析出的資訊儲存到外存上過幾天也失去了意義。如果是為億量級服務的web資訊蒐集模組,要考慮單獨建立為蒐集子系統服務的dns模組,這樣能夠既加快網頁資訊的獲取,又進一步降低對dns伺服器的壓力。
增加ip範圍控制的原因:
1)有些站點不希望蒐集程式搜走自己的資源。比如很多建設在大學範圍內的**檢索系統,通常只是對學校ip範圍內開放的。如果蒐集程式處於允許檢索ip範圍內,蒐集了這些資源,然後提供服務,就有可能使非授權使用者看到了**資訊。
2)針對特定資訊的搜尋,比如:校園網搜尋,新聞**搜尋。
3)網路資費方式也會對蒐集策略產生影響。有的網路基礎設施提供商可能會規定在對不同ip範圍資訊的訪問採用不同的資費策略,因此從執行成本考慮,也可能需要對ip範圍控制。
mysql學習筆記(六) mysql的搜尋引擎
1 myisam 它是基於傳統的isam型別,isam是indexed sequential access method 有索引的順序訪問方法 的縮寫,它是儲存記錄和檔案的標準方法。支援全文索引,不支援事務,表鎖。2 innodb 支援事務安全的引擎,支援外來鍵 行鎖 事務,最早不支援全文索引,my...
搜尋引擎《原理 技術與系統》讀書筆記(5)
hub網頁 hub 網頁 pic 內容類別 是從語義上對網頁的內容進行分類 正文是原始網頁中真正描述主題的部分,因此,在某些具體應用中用正文代替原始網頁更為合理。相關鏈結是指在本網頁中指向與正文內容相關的網頁的鏈結,而非廣告等噪音鏈結。將正文和相關超鏈重新組合就得到了淨化後的網頁。網頁的表示 構造標...
學習筆記二,vc 建立多執行緒伺服器(三)
停止服務stopservice void stopservice void else else bserverrunning false showserverexitmsg sleep timefor thread exit waitforsingleobject hserverevent,infi...