关于利用SMTP和POP协议来实现分布式查询的讨论
上次我问的关于分布式查询的问题也没人给回复,这次我又有了个思路,请大家一起讨论。
http://www.cnblogs.com/onlytiancai/archive/2007/03/27/690558.html
介绍一下背景:首先用户使用WawaKM客户端把从网上收集的有用的文章或者自己总计的问题解决办法保存成mht单一文件,然后有时候用户遇到一个问题要搜索其它用户那里是否有这个问题的解决方案,以求快速的解决问题。然而每个用户的文档都在自己机器上,服务器并不知道哪个用户有这个问题的答案,就算知道哪个用户那里有相关资料,这个用户也不一定当时在线,所以服务器无法直接返回给查询问题的用户。这就是需求和难点。
1、首先每个人把本地要共享的文档(网上收集的mht文件)用lucene进行索引,索引里有个资源域的格式是:“用户名:mht文件的路径名”。
2、定期通过web服务把本地的lucene索引文件用gzip压缩并base64编码后提交到服务器,服务端接受到请求后把压缩包解开并合并到服务端的全局总索引中(不知道技术上这一步能否实现,但是我们要求所有客户的索引的格式都一样,索引域也都一样,应该可以做到,这一步我得问问lucene专家)。
3、用户A向服务器发出查询“MDX语句”关键字的请求,服务端查询全局总索引,并把结果分页显示给客户a。
4、用户A发现其中一条搜索结果对自己有价值,就调用本地的opensmtp给这个资源拥有者(客户B)发一封邮件,邮件格式为“[WawaKM][get][MDX语句][用户名:mht文件的路径名]”
5、在用户A发送给用户B请求资源文件的时候,用户B也许没上线,但当用户B打开WawaKM的时候,WawaKM会使用OpenPOP组件来收取邮件头,发现来自用户A的邮件,就会解析这个邮件的Subject,把这个subject当作一个命令处理,然后在后台新建一邮件,把用户a请求的mht文件当作附件,以"[WawaKM][post][MDX语句]"为标题给用户A回一个邮件。
6、用户A再次收取本地邮件头,凡是[WawaKM][post]开头的邮件头都把邮件正文下载下来,然后根据“[WawaKM][post][MDX语句]”里的“[MDX]语句”部分,对邮件进行分类保存,其实就是以查询关键字分类邮件。并在界面上给予用户提示,让用户知道自己以前发起的文件请求有结果到达了。
这样,我们没有用bt协议,也没有用电驴协议就实现了分布式P2P的搜索,而且是完全异步的,还挺省服务器资源。就是需要每个用户配置一个支持SMTP和POP3的邮箱,要不没法实现文件共享和知识分享的功能。
不知道这次的设计可行性有多大,欢迎大家指导,谢谢。