TCP、UDP、HTTP、NIO

这这里不是写用TCP、UDP、HTTP、NIO 怎么编程,网上有一大堆的代码。。。


之前的一个项目是用HTTP协议来实现IM项目,用到了servlet3.0,由于http协议是无状态的,所以基于http协议的聊天开发感觉有很大的不便,可是又没什么好的、快的方法,就只好用http协议+servelt来开发了。


这两天看了下新浪微博的SDK,然后看了下TCP和UDP,这些底层的知识要补一补了。


先讲TCP吧,TCP的三次握手大家都知道吧?SYN、ACK神马的。。。 C和S握好手以后,利用JDK里面的socket,可以得到inputStream和outputStream,然后就发送和接受消息吧。


UDP和TCP不一样,它把数据打包成数据包,并将接收方的ip和端口后附在数据包上,发送,就不管了。


HTTP是基于TCP上面的,所以也要先三次握手,握好手后,在HTTP层:C向S发送消息,S接受返回,此次会话结束,当然这个会话过程是有TCP在支持的。不过我不知道一次会话结束以后C和S之间的TCP连接通道是否还在? 我觉得可以在,也可以不在,也可以超时关闭等各种自定义操作吧。


另外,从客户端考虑,JDK自带HttpURLConnection的父类URLConnection中可以获得inputStream和outputStream;从服务端有req.getInputStream()和resp.getOutputStream(),是不是和TCP的那个一来一回模式很像啊?客户端在outputStream里面写数据,flush后,还要调用httpConn.getInputStream();这个方法,这样数据才是真正发到了服务器,那么底层到底是哪个方法将数据发送给服务器的?


说起NIO不得不提到阻塞和非阻塞了。我简单的理解是:阻塞是线程要等待某个资源,如果等不到某个资源,那CPU就会切换别的线程,这样切换来切换去,浪费资源。而非阻塞是让需要等待资源的那些线程休眠,资源来的时候,有线程去唤醒对应工作线程起来工作了。本来很多人等,现在只要一个人等了,就这么简单。

参考这个帖子: http://www.iteye.com/topic/834447





结束语:以上是我做项目中,平时遇到的以及思考后总结出来的,本人刚从事软件工作,在上层有很多问题想不通,需要好好研究下层啊,打好基础真的很重要,最后希望并期待和大家的交流!

你可能感兴趣的:(http,tcp,nio,UDP)