浅析socket与http (转载)
现在搞开发,很难不碰到http和socket了,原以为这些东西应该是一个基础课程,不过最近例行走读了一些旧代码,发现一些代码存在着明显的瑕疵,因为很多逻辑处理过程不在同一个水平线上,感觉可能是一些基础理论上的理解导致了程序的处理并没有走最优化的路线.兴趣时间所致,随便写几句
首选说说http.
http全文是超文本传输协议,是一种万维网常用的协议,它是TCP协议的一种典型上的应用,而TCP协议有一个典型的特点,个人认为非常的不好,就是"三次握手",你说你一次性给我说明白了不好,还非要一来一去,又不是谈恋爱.当然了,玩笑归玩笑,记住这个特征,因为很多时候我们都会忘记这个基本特征.
http还有一个特点是"断链接",你也可以说是短链接,不过用"断链接"我觉的更合适.也就是说当我们用http协议打开一个信息点的时候,信息读取完毕双方会自动断开.
再说说socket
socket(套接字)是TCP/IP协议的基本操作单元。它是网络通信过程中端点的抽象表示。同HTTP不同的是http只能走tcp,socket不仅能走tcp,而且还能走udp,这个是socket的第一个特点
socket的另外一个特点是他可以是"长链接",也就是说除非双方主动断开,否则,他不会自动断开.这个特点非常的好,很多应用都会需要长链接,不过缺点是他太博爱了,来者不拒,而且还不好检查,所以,为了保持服务器资源的最大利用率,通常我们会要求双方通过定时的心跳方式来确认长链接的有效性.只要心跳不存在,服务器就可以及时剔除掉这些死链接.
ok,这样一分析,一的意思是我们就能理解了常规处理下,哪些地方用"PUSH", 哪些地方用"PUll"了.二的意思也就是说在TCP的握手协议的基础上,我们是完全可以通过socket的互相应答的方式实现http的请求-应答传输的.尤其是在一些特定的应用下,使用简单的socket模拟http,比用http要快很多.平常时候看不出来效果,关键时刻拼的就是效率了.