Linux企业级项目实践之网络爬虫(20)——扩展成为规则插件模式
来源:互联网 发布:炉石数据统计 编辑:程序博客网 时间:2024/04/28 22:45
为了方便我们爬虫功能的扩展,最好使用插件机制。
使用插件技术能够在分析、设计、开发、项目计划、协作生产和产品扩展等很多方面带来好处:
(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};
0 0
- Linux企业级项目实践之网络爬虫(20)——扩展成为规则插件模式
- Linux企业级项目实践之网络爬虫(24)——定制规则扩展为垂直爬虫
- Linux企业级项目实践之网络爬虫(21)——扩展为多任务爬虫
- Linux企业级项目实践之网络爬虫(6)——将程序设计成为守护进程
- Linux企业级项目实践之网络爬虫(3)——设计自己的网络爬虫
- Linux企业级项目实践之网络爬虫(28)——爬虫socket处理
- Linux企业级项目实践之网络爬虫(1)——项目概述及准备工作
- Linux企业级项目实践之网络爬虫(25)——管理源代码之SVN
- Linux企业级项目实践之网络爬虫(4)——主程序流程
- Linux企业级项目实践之网络爬虫(5)——处理配置文件
- Linux企业级项目实践之网络爬虫(7)——DNS解析
- Linux企业级项目实践之网络爬虫(8)——认识URL
- Linux企业级项目实践之网络爬虫(9)——通过URL抓取网页内容
- Linux企业级项目实践之网络爬虫(10)——处理HTTP状态码
- Linux企业级项目实践之网络爬虫(11)——处理http请求头
- Linux企业级项目实践之网络爬虫(12)——处理HTTP应答头
- Linux企业级项目实践之网络爬虫(13)——处理user-agent
- Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件
- 手机ROM即将翻倍 三星V-NAND技术详解
- 痴心不改
- 现代操作系统笔记
- 数据库索引
- css设计登陆框
- Linux企业级项目实践之网络爬虫(20)——扩展成为规则插件模式
- 5:59
- 升级win8后视频没有图像只有声音的一个解决方法
- 开机自启动 任务管理器
- AS3 Starling塔防教程——第九部分——UI游戏组件
- 可信系统之路
- swift学习日志-1基础篇 基础运算符
- mybatis之增删改查
- 编写你自己的单点登录(SSO)服务