haohao

Socket Socket.io Websocket 与 HTTP 之间的区别

Markdown

教育的目的从来都是精神的独立而不是给予苦头,除非有人不希望看到你太“自在”,需要通过制度展示权力的威严


本篇从特征角度介绍一下,Socket、 Socket.io、 Websocket、 HTTP 之间的区别。

Socket 、 Socket.io 、 Websocket 、 HTTP 之间的区别

socket

Socket 是操作系统提供的对于传输层(TCP / UDP)抽象的接口,是一个编程概念,而 Websocket 、Socket.io 与 HTTP 一样是一个成文的互联网协议。另外,Websocket 和 HTTP 都是基于 TCP 传输数据,Socket.io 可以看作是对 Websocket 和 HTTP 的又一次封装。

http

HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接。
无状态:每次连接只处理一个请求,请求结束后断开连接。
无连接:对于事务处理没有记忆能力,服务器不知道客户端是什么状态。

以往实现即时通讯的手段:
轮询:客户端定时向服务器发送 Ajax 请求,服务器接到请求后马上返回响应信息并关闭连接。
长轮询:客户端向服务器发送 Ajax 请求,服务器接到请求后 hold 住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
长连接:在页面里嵌入一个隐蔵 iframe,将这个隐蔵 iframe 的 src 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。
Flash Socket:在页面中内嵌入一个使用了 Socket 类的 Flash 程序 JavaScript 通过调用此 Flash 程序提供的 Socket 接口与服务器端的 Socket 接口进行通信,JavaScript 在收到服务器端传送的信息后控制页面的显示。

websocket

Websocket 的出现就是为了解决 HTTP 在即时通信中存在的不足,HTTP 是通过 Polling 实现即时通信存在很大的资源开销。

Webscoket 握手阶段采用 HTTP 协议,连接建立之后便与 HTTP 协议没有任何关系,Websocket 连接建立之后,client 与 server 可以同时收发数据,全双工通讯。

socketio

Socket.io 支持 Websocket 协议,支持多种轮询机制,它实现了实时、双向、基于事件的通讯机制,天生用来解决实时通讯问题。另外,Socket.io 能够根据浏览器对通讯机制的支持情况自动地选择最佳的方式来实现网络实时应用。



联系我

Wechat ID

公众号

生活不止于眼前的苟且, 还有诗和远方的田野