http之tcp具体实现

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

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

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

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


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

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


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

读通道里的tcp连接内容。

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

就按照这个一行一行解析tcp消息体

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Tcp 通过下列方式提供可靠性: tcp 是面向连接,可靠的字节流服务。 字节流服务:两个应用程序通过tcp 连接...
    irckwk1阅读 705评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 2,250评论 0 14
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,096评论 0 8
  • 诗书礼乐易春秋,是为六艺。于君子有礼乐射御书数。礼者,进退;乐者内和;射御武道也;书数,文道也。
    十年一井阅读 220评论 0 0