http之tcp具体实现

       我这人比较懒,之前计划每周至少一篇博客,但是自从写了几篇之后再也没减持下去。最近有个小伙伴在http长连接下面@我。因此呢,为了避免以后有人还问。所以这次我写一个http之tcp具体实现,帮助大家具体理解所谓的通信协议到底是什么。

       *******所谓的通信协议就是通信双方约定的规则*******

        比如对于tcp来说,双方约定建立链接时,相互hello对方一个,发起这多hello一次。结束时双方bye一次,并相互确认bye听到了。这就是tcp协议的一部分。当然tcp协议很复杂,还有很多其他约定。

        http是以消息封装在tcp消息体里的。在传输层来看,http协议就是一个消息。网上具体背书式的介绍http协议我就不介绍了。请参看我写的http协议那篇里面有链接。下面直接讨论http实现的主干逻辑。  


http之tcp具体实现_第1张图片

        本文是使用ServerSocketChannel实现的。这个东西依赖于java。不知道其他语言怎么搞得,没考究过。不过应该万变不离其宗。

        上图为通过线程绑定端口,注册通道,让后通过线程启动,来监听web服务。


http之tcp具体实现_第2张图片

上图为接受tcp连接是个SocketChannel对象,让后将SocketChannel放到线程池中处理。

http之tcp具体实现_第3张图片
http之tcp具体实现_第4张图片
http之tcp具体实现_第5张图片

读通道里的tcp连接内容。

http之tcp具体实现_第6张图片

        这里的解析我就不贴代码了,因为太长。解析就是读tcp消息体,让后http协议格式,解析http消息。http协议格式:

http之tcp具体实现_第7张图片
就按照这个一行一行解析tcp消息体

        然后根据URL里面 链接地址,解析出对应的处理方法进行响应处理。这就是http整个协议使用tcp实现的逻辑。因为我是使用公司代码。很多有业务逻辑代码我没有贴。所以看起来可能有点缺失。

        建议大家可以去看jetty源码,就可以理解了。

你可能感兴趣的:(http之tcp具体实现)