我这人比较懒,之前计划每周至少一篇博客,但是自从写了几篇之后再也没减持下去。最近有个小伙伴在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源码,就可以理解了。
网友评论