0%

即时通讯和websocket协议

我们常用微信进行聊天,直播中进行互动,淘宝京东撩在线客服,这都使用了即时通讯,即时通讯其实是个看起来简单但实际非常复杂的技术,本文主要以简单了解即时通讯为主


即时通讯

1.简介

即时通信(Instant Messaging,简称IM)是一个允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。

即时通讯技术应用于需要实时收发消息的业务场景

  • 直播互动
  • 在线客服
  • 社交App
  • 物联网

2.短连接和长连接

说起即时通讯不得不提到通信协议TCP / UDP,即时通讯使用的是TCP长连接,TCP 本身并没有长短连接的区别 ,长短与否,完全取决于我们怎么用它

参考链接:

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功能实现

由于即时通讯功能的实现其实也是非常复杂的,一个完善的即时通讯系统是需要投入很多成本的,很多公司也不会自行去开发一个即时通讯系统,很多都是采用第三方服务来实现即时通讯。

第三方即时通讯服务:

5.好文推荐

没办法,要恰饭的嘛!