服务器
4.说到服务器模块,这里我承认这确实不是我的强项,我是做后端开发的,前端的js,css,html这些都是一知半解,也就够拿来写个小小的简单的站内搜索,果然学习之路任重道远啊。
http协议,作为非常重要的应用层协议,遇到和使用到的概率非常的大。http的协议各是是这样的:
1)请求:首行(方法,url,版本) + header(键值对结构) + 空行 + body
2)响应:首行(状态,状态码,描述) + header(键值对结构) + 空行 + body
所谓的http服务器本质上就是一个TCP服务器,通过这些socket,api,按照TCP协议的方式来处理数据,处理过程中再根据http协议的格式进行解析请求和构造响应。这里用到cpp-httplib这个实现好的库来完成需求。
通过svr.Get()函数把url关联到一个具体的回调函数,使得我们不用自己决定何时调用,而是把函数交给库或者框架,由第三方决定何时调用。回调函数的工作核心就是根据请求计算响应,把响应结果写在response对象中。再通过svr.listen()启动服务器,绑定ip及端口。
服务器构建好以后,最繁杂的步骤来了——设计一个美观合理的页面。我们的搜索页面大致长这样:
HTML的基本特点是:
1.由标签<xxx>开始,由标签</xxx>结束;
2.开始标签和结束标签中夹得就是内容;
3.内容也是标签时,标签之间这样的嵌套关系成为“父子关系”;
一个html文件,其核心是一个html标签,里面包含head和body标签。
而html只能实现一个页面的骨架,想让页面好看起来,还得用CSS。在<head>标签中加一对<style>标签就可以加入CSS的内容。CSS是由‘选择器 + 属性’构成其基本语法的,选择器选择针对哪个html生效,而属性则设置要改成什么样子。
经过一番修改后我们的页面已经有了模样:
而要实现搜索功能,则需要JS来完成了。JavaScript是一种风格接近于c的编程语言,通过它可以实现一些逻辑,包括感知用户的点击按钮,感知搜索框的内容,给服务器发送请求以及根据服务请求来绘制页面。JS原生的API操作界面十分的复杂,我们选择通过外部库来简化操作——JQuery。
一番设计与操作之后,我们在网址栏输入预先确定好的网址,输入查询词“filesystem”,点击搜索之后,当当当当!
画面已经变成了这个样子,点击跳转页面:
访问无误。
至此,基于boost文档的搜索引擎彻底开发完毕。
回顾整个项目,从后台开发到前端设计,无不体现着技术的进步,从一开始的简单遍历难以设计,到最后的非专业知识的前端已经可以做的很好看(自认为),做项目带来的收获是理论知识难以比拟的。而作为一个搜索引擎,和商业搜索引擎相比还有很多的差距:
1.支持的数据量差距(boost离线版本的html才5800多个)
2.请求量的差距(毕竟现在搜索测试只在自己的电脑上完成)
3.业务复杂度与级别的差距(索引校验,权重描述,过滤规则,接口调试......)
还有许许多多的差距是这个小的站内搜索引擎没能实现的,希望将来有一天,我们也能把他做的像github上许多开源的大型搜索引擎一样好。
boost项目复盘(四)
原创文章标签 boost文档搜索引擎项目 文章分类 C/C++ 后端开发
上一篇:boost项目复盘(三)
下一篇:树形结构总结

-
复盘
复盘是对过去的事情做思维演练!助你把事情琢磨透、做成功!
复盘 PDCA PDF -
四套复盘模板
题的原因,总结规律,指导我们解决
工作计划 解决方案 问题分析 -
es客户端用法
一、ElasticSearch 简介1、简介ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速
es客户端用法 elasticsearch 客户端工具 elasticsearch 数据类型 elasticsearch 文档 elasticsearch