我们常用微信进行聊天,直播中进行互动,淘宝京东撩在线客服,这都使用了即时通讯,即时通讯其实是个看起来简单但实际非常复杂的技术,本文主要以简单了解即时通讯为主
即时通讯
1.简介
即时通信(Instant Messaging,简称IM)是一个允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。
即时通讯技术应用于需要实时收发消息的业务场景
- 直播互动
- 在线客服
- 社交App
- 物联网
2.短连接和长连接
说起即时通讯不得不提到通信协议TCP / UDP,即时通讯使用的是TCP长连接,TCP 本身并没有长短连接的区别 ,长短与否,完全取决于我们怎么用它
参考链接:
- https://www.cnblogs.com/0201zcr/p/4694945.html
- https://www.cnkirito.moe/tcp-talk/
- https://developer.aliyun.com/article/37987
1.短连接
客户端和服务器每进行一次通讯,就建立一次连接,通讯结束就中断连接

HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。HTTP/1.0使用的TCP默认是短连接
2.长连接
是指在建立连接后可以连续多次发送数据,直到双方断开连接

HTTP从1.1版本起,底层的TCP使用的长连接
Connection:keep-alive
3. HTTP 1.1和HTTP 1.0 的区别

在HTTP 0.9和1.0中,TCP连接在每一次请求/回应对之后关闭。在HTTP 1.1中,引入了保持连线的机制,一个连接可以重复在多个请求/回应使用。持续连线的方式可以大大减少等待时间,因为在发出第一个请求后,双方不需要重新运行TCP握手程序。
只讲连接这块,摘选自维基百科
4.适用场景
短连接:并发量大,数据交互不频繁情况
长连接:数据交互频繁,点对点的通讯
3.websocket协议
1.简介
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议
全双工(Full Duplex)是通讯传输的一个术语。双方在通信时允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时进行信号的双向传输。指A→B的同时B→A,就像是双向车道。
单工就就像是汽车的单行道,是在只允许甲方向乙方传送信息,而乙方不能向甲方传送
在 WebSocket中,浏览器和服务器只需要完成一次连接,就可以创建持久性的连接,并进行双向数据传输
在推送功能的实现技术上,相比使用Ajax 定时轮询的方式(setInterval),WebSocket 更节省服务器资源和带宽

2.websocket常用事件方法
以下 API 用于创建 WebSocket 对象。
1 | var Socket = new WebSocket(url, [protocol] ); |
WebSocket 事件
以下是 WebSocket 对象的相关事件。假定我们使用了以上代码创建了 Socket 对象:
事件 | 事件处理程序 | 描述 |
---|---|---|
open | Socket.onopen | 连接建立时触发 |
message | Socket.onmessage | 客户端接收服务端数据时触发 |
error | Socket.onerror | 通信发生错误时触发 |
close | Socket.onclose | 连接关闭时触发 |
WebSocket 方法
方法 | 描述 |
---|---|
Socket.send() | 使用连接发送数据 |
Socket.close() | 关闭连接 |
4.IM功能实现
由于即时通讯功能的实现其实也是非常复杂的,一个完善的即时通讯系统是需要投入很多成本的,很多公司也不会自行去开发一个即时通讯系统,很多都是采用第三方服务来实现即时通讯。
第三方即时通讯服务: