为什么需要http转socket,不直接用http

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么需要http转socket,不直接用http相关的知识,希望对你有一定的参考价值。

HTTP其实也是socket,只不过他是基于TCP的短连接,功能有限,除了可以剔除暂时不用的链路外,优点不明显,相反缺点多: HTTP采用明文传输,安全方面不行,socket可以采用自定义协议,所以更加安全. HTTP通常是短连接,没法收到服务器主动推送的消息,socket则可以,通常是常连接 HTTP传输比较占用流量,而用socket则只是结构体对齐,省去了变量的名词 HTTP解析速度慢,而用socket则通常不需要解析,只是简单的判断消息类型,即可. 当然用HTTP开发速度快,很容易就完成一个APP界面 参考技术A 连接数少,或者一个请求一个响应这种场景可以考虑Http请求,比如web应用。
2
参考技术B Socket不属于协议范畴,而是一个调用接口(API),是对TCP/IP协议的封装。实现服务器与客户端之间的物理连接,并进行数据传输。Socket处于网络协议的传输层,主要有TCP/UDP两个协议(当然也有TCP/IP协议族中其他的协议)。

socket连接是长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会使连接断开,比如:服务器端或客户端主机宕机了、网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息。

socket传输的数据可自定义,为字节级,数据量小,可以加密,数据安全性高,适合Client/Server之间信息实时交互。

HTTP是基于TCP/IP协议的应用层协议,定义的是传输数据的内容规范。

HTTP是基于请求-响应形式并且是短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。

HTTP的传输速度慢,数据包大,数据传输安全性差,如实现实时交互,服务器性能压力大。

socket一般用于比较即时的通信和实时性较高的情况,比如推送,聊天,保持心跳长连接等;

http一般用于实时性要求不那么高的情况,比如信息反馈,图片上传,获取新闻信息等。

某些场合使用http不使用socket的原因是socket一旦连接上了,就一直保持连接,就会造成阻塞IO,与此相对的的,还有非阻塞IO。

阻塞IO是指客户端请求服务器端,服务器端处理完成后,再将返回值给客户端。此时客户端一直处在阻塞状态。当客户端太多、同时并发请求的时候,服务器端处理不过来,服务端就会一直卡在那里等待,影响用户体验。因此提出了非阻塞IO。

非阻塞IO是指客户端请求服务器端,服务器端有一些监听器负责接受请求,接收到客户端发来的请求之后立即返回,即告诉客户端已经接受好了,等处理完成后再把数据返回客户端,在服务端处理数据期间客户端不会一直阻塞等待。

以上是关于为什么需要http转socket,不直接用http的主要内容,如果未能解决你的问题,请参考以下文章

实用小技巧 | 用socket玩转http接口

C# socket接收 http返回

直接用socket实现HTTP协议(下载专用)

什么时候用http网络连接,什么时候用socket网络连接呢?

C# Socket 模拟http服务器帮助类

什么时候用http网络连接,什么时候用socket网络连接