一、说在前面的话前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端、移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析、分拣后从不同的维度做实时和离线分析。(ps:这种活儿本该由统计部门去做的,但由于各种原因落在了我头上,具体原因略过不讲……) 先用个“概念图”来描绘下整个系统的架构:
嗯,这个是真正的“概念图”,因为我已经把大部分细节都屏蔽了,别笑,因为本文的重点只是整个架构中的一小部分,就是上图中红框内的 http server。 也许你会问,这不就是个 HTTP 服务器吗,而且是只处理一个请求的 HTTP 服务器,搞个java web 项目在 Tomcat 中一启动不就完事儿了,有啥好讲的呀?。莫慌,且听=慢慢道来为啥要用 netty HTTP 协议栈来实现这个接收转发服务。
基于以上几点原因,就决定使用 netty HTTP 协议栈开干啦~
1.1 关于netty examplenetty 官方提供了关于 HTTP 的例子,大伙儿可以在 netty 项目中查看。 https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/http https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/http2 1.2 关于github项目本人在网上使用 “netty HTTP” 的关键字搜索了下,发现大部分都是原搬照抄 netty 项目中的 example,很少有“原创性”的实践,也几乎没有看到实现一个相对完整的 HTTP 服务器的项目(比如如何解析GET/POST请求、自定义 HTTP decoder、对 HTTP 长短连接的思考等等……),因此就自己整理了一个相对完整一点的项目,项目地址 https://github.com/cyfonly/netty-http,该项目实现了基于 netty5 的 HTTP 服务端,暂时实现以下功能:
将来可能会继续实现的功能有:
好了,闲话不多说,下面正式进入正题。
二、HTTP 协议知多少要通过 netty 实现 HTTP 服务端(或者客户端),首先你得了解 HTTP 协议【1】。 HTTP 协议是请求/响应式的协议,客户端需要发送一个请求,服务器才会返回响应内容。例如在浏览器上输入一个网址按下 Enter,或者提交一个 Form 表单,浏览器就会发送一个请求到服务器,而打开的网页的内容,就是服务器返回的响应。 下面讲下 HTTP 请求和响应包含的内容。 HTTP 请求有很多种 method,最常用的就是 GET 和 POST,每种 method 的请求之间会有细微的区别。下面分别分析一下 GET 和 POST 请求。 2.1 GET请求下面是浏览器对 http://localhost:8081/test?name=XXG |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|