Linux企業級專案實踐之網路爬蟲(20)——擴充套件成為規則外掛模式
為了方便我們爬蟲功能的擴充套件,最好使用外掛機制。
使用外掛技術能夠在分析、設計、開發、專案計劃、協作生產和產品擴充套件等很多方面帶來好處:
(1)結構清晰、易於理解。由於借鑑了硬體匯流排的結構,而且各個外掛之間是相互獨立的,所以結構非常清晰也更容易理解。
(2)易修改、可維護性強。由於外掛與宿主程式之間通過介面聯絡,就像硬體插卡一樣,可以被隨時刪除,插入和修改,所以結構很靈活,容易修改,方便軟體的升級和維護。
(3)可移植性強、重用力度大。因為外掛本身就是由一系列小的功能結構組成,而且通過介面向外部提供自己的服務,所以複用力度更大,移植也更加方便。
(4)結構容易調整。系統功能的增加或減少,只需相應的增刪外掛,而不影響整個體系結構,因此能方便的實現結構調整。:
(5)外掛之間的耦合度較低。由於外掛通過與宿主程式通訊來實現外掛與外掛,外掛與宿主程式間的通訊,所以外掛之間的耦合度更低。
(6)可以在軟體開發的過程中修改應用程式。由於採用了外掛的結構,可以在軟體的開發過程中隨時修改外掛,也可以在應用程式發行之後,通過補丁包的形式增刪外掛,通過這種形式達到修改應用程式的目的。
(7)靈活多變的軟體開發方式。可以根據資源的實際情況來調整開發的方式,資源充足可以開發所有的外掛,資源不充足可以選擇開發部分外掛,也可以請第三方的廠商開發,使用者也可以根據自己的需要進行開發。
vector<Module *> modules_pre_surl;
vector<Module *> modules_post_header;
vector<Module *> modules_post_html;
Module * dso_load(const char *path, const char *name)
{
void *rv = NULL;
void *handle = NULL;
Module *module = NULL;
char * npath = strcat2(3, path, name, ".so");
if ((handle = dlopen(npath, RTLD_GLOBAL | RTLD_NOW)) == NULL) {
SPIDER_LOG(SPIDER_LEVEL_ERROR, "Load module fail(dlopen): %s", dlerror());
}
if ((rv = dlsym(handle, name)) == NULL) {
SPIDER_LOG(SPIDER_LEVEL_ERROR, "Load module fail(dlsym): %s", dlerror());
}
module = (Module *)rv;
module->init(module);
return module;
}
#include "dso.h"
#include "socket.h"
#include <fcntl.h>
static int handler(void * data) {
Response *r = (Response *)data;
if (strstr(r->header->content_type, "text/html") == NULL)
return MODULE_ERR;
char *fn = url2fn(r->url);
int fd = -1;
if ((fd = open(fn, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {
return MODULE_ERR;
}
int left = r->body_len;
int n = -1;
while (left) {
if ((n = write(fd, r->body, left)) < 0) {
// error
close(fd);
unlink(fn);
free(fn);
return MODULE_ERR;
} else {
left -= n;
}
}
close(fd);
free(fn);
return MODULE_OK;
}
static void init(Module *mod)
{
SPIDER_ADD_MODULE_POST_HTML(mod);
}
Module savehtml = {
STANDARD_MODULE_STUFF,
init,
handler
};
相關文章
- [外掛擴充套件]三級聯動外掛!!!!!!!!套件
- [外掛擴充套件]Ping外掛套件
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- 八個改變遊戲規則的chrome外掛擴充套件遊戲Chrome套件
- jQuery外掛擴充套件jQuery套件
- jQuery擴充套件外掛jQuery套件
- [外掛擴充套件]jQueryFileUpload套件jQuery
- [外掛擴充套件]更新IP外掛套件
- [外掛擴充套件]附件Attachment外掛套件
- [外掛擴充套件]投票外掛1.0套件
- [外掛擴充套件]外掛需求徵集套件
- 擴充套件Linux網路棧套件Linux
- [外掛擴充套件]廣告外掛2.0套件
- [外掛擴充套件]焦點圖外掛套件
- [外掛擴充套件]單頁管理外掛套件
- [外掛擴充套件]邀請碼外掛套件
- [外掛擴充套件]騰訊分析外掛套件
- [外掛擴充套件]修改密碼外掛套件密碼
- [外掛擴充套件]友情連結——外掛套件
- [外掛擴充套件]qq登入外掛套件
- [外掛擴充套件]留言版外掛套件
- 專案中 vscode 外掛擴充套件失效怎麼解決VSCode套件
- [外掛擴充套件]通用網站統計套件網站
- 外掛擴充套件需求_好友套件
- iOS 通知擴充套件外掛iOS套件
- [外掛擴充套件]違規資訊使用者舉報外掛套件
- 網路爬蟲專案爬蟲
- [外掛擴充套件]APP極光推送外掛!套件APP
- [外掛擴充套件]百度分享外掛套件
- [外掛擴充套件]跪求時間軸外掛套件
- [外掛擴充套件]防護雲Iswaf外掛套件
- [外掛擴充套件]返回頂部ReturnTop外掛套件
- [外掛擴充套件]圖片輪播外掛套件
- [外掛擴充套件]計劃任務外掛套件
- [外掛擴充套件]js版本分頁外掛套件JS
- [外掛擴充套件]書架外掛(新外掛後臺)套件
- [外掛擴充套件]圖片牆套件
- 建立VS Code 擴充套件外掛套件
- VSCode WebView外掛(擴充套件)開發實戰VSCodeWebView套件