Socket.io 初步探索

img

Socket.io 是什么?

socket.io是基于时间的实时双向通信库,它是基于websocket协议的,不同于ajax的http协议的。
前后端通过事件进行双向通信,socket.oi对暴露的接口非常简单,例如onemitonce等等。

Socket通信模型

Socket通信模型

配合express

后端:

1
2
3
4
5
6
// server.js
const app = express()
const server = require('http').createServer(app)
const io = require('socket.io')(server)
io.on // 监听事件
io.emit // 触发事件

前端:

1
2
3
import io from 'socket.io-client'
io.on // 监听事件
io.emit // 触发事件

Socket.io 与 ajax 各自的协议特点

WebSocket 协议

Socket是基于websocket协议的一个库,前后端进行双向通信的协议,后端可以主动推送数据。

http 协议

ajax是所谓的异步刷新,异步获取数据然后局部刷新,ajax是基于http协议的,它是单向的,实时获取数据只能轮询或者long poling。

长连接、长轮询(long polling)

基于HTTP的长连接,是一种通过长轮询方式实现”服务器推”的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。

什么是长连接、长轮询?

用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已。