美文网首页Web前端之路
你需要了解的WebSocket

你需要了解的WebSocket

作者: 相遇一头猪 | 来源:发表于2019-08-01 15:37 被阅读3次

现在直播非常火,直播里面的聊天窗用到了WebSocket,这里做一个介绍。
首先,先简单说一下ajax轮询和长轮询,面试中经常拿来比较。

ajax轮询

定时的通过Ajax查询服务端。怎么定时?使用setInterval()
缺点:需要服务器有很快的处理速度和资源。

长轮询

长轮询,算是Ajax轮询的升级版。在发送ajax请求后,服务器把请求挂起,直到有新数据或超时才返回响应。 客户端在响应处理函数中再次发出请求,再次建立连接,周而复始。
缺点:服务器需要能抗并发。

简介

WebSocket是一个新增的应用层协议,html5使用了WebSocket API规范,可以为浏览器和服务器双方提供全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的。
这也意味着,WebSocket解决了http协议只能由客户端主动发起的弊端。在建立连接后,服务器可以主动发送信息给客户端而不需要客户端的请求。

相比http协议,WebSocket有以下几个优点:

  • 与 http协议有着良好的兼容性,默认端口是80或443,并且握手阶段采用 http 协议,通过请求头升级为WebSocket(这里如果不懂继续往下看)。
  • 没有同源限制。
  • 服务端推送。
  • 在大量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势。
  • 客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。
  • 数据格式比较轻量,性能开销小,通信高效(连接不断开)。
  • 可以发送文本,也可以发送二进制数据。

客户端使用WebSocket

建立连接

WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例,其中参数以ws:开头或者wss:开头,后面接服务器地址。

let ws = new WebSocket("ws://localhost:8080");  //发起websocket一个连接

执行上面代码后,客户端会尝试与服务器建立连接。

关于WebSocket握手阶段使用http协议,可以看一下发送的请求头:


图片.png

也就是说建立连接还是按三次握手,最后在服务端把协议升级为WebSocket协议。

连接成功

实例对象的onopen属性,用于指定连接成功后的回调函数(或者监听open事件)。

ws.onopen = function(e) {
    console.log("成功建立连接");
    //dosomething 
}

如果要添加多个回调函数,可以使用addEventListener。

ws.addEventListener("open", function(e) {
    console.log("成功建立连接");
    //dosomething 
});

收到信息

实例对象的onmessage属性,用于指定收到服务器数据后的回调函数 。

ws.onmessage = function(e) {
    var data = e.data;
   // dosomething
};

或者监听message事件。

ws.addEventListener("message", function(event) {
    var data = event.data;
    //dosomething 
});

关闭连接

实例对象的onclose属性,用于指定连接关闭后的回调函数。

ws.onclose  = function(e) {
    console.log("连接关闭.");
   //dosomething 
}

或监听close事件。

 ws.addEventListener("close", function(e) {
    console.log("连接关闭");
    //dosomething 
});

向服务器发送数据

实例对象的send方法可以向服务器发送数据。在发送数据前,请确保连接已经建立。

  ws.send("发送数据");

主动关闭连接

实例对象的close方法用于关闭连接。

  ws.close();

最后,WebSocket需要浏览器和服务器一起使用,在实际生产一般会使用第三方库,如socket.io

参考文章

Websocket(一)——原理及基本属性和方法

WebSocket 教程

相关文章

  • 你需要了解的WebSocket

    现在直播非常火,直播里面的聊天窗用到了WebSocket,这里做一个介绍。首先,先简单说一下ajax轮询和长轮询,...

  • 在 go 中实现 websocket 服务

    目标:了解 websocket ,能够使用 golang 来实现 websocket 服务 要求:了解 go 基本...

  • websocket原理

    上文中提到websocket连接,本文针对websocket进行简单的了解。 WebSocket 协议在2008年...

  • websocket + node.js

    websocket的原理和应用 在继续本文之前,让我们了解下websocket的原理: websocket通信协议...

  • WebSocket 原理

    今天来讲一下WebSocket的原理,能让你更深入的去了解WebSocket,深知其原理,才能更好的去使用它。 ...

  • WebSocket

    WebSocket(1)---WebSocket介绍 一、为什么需要 WebSocket?初次接触 WebSock...

  • WebSocket入门及使用指南

    最近在一个项目中,需要使用到websocket,之前对websocket不是很了解,于是就花了一点时间来熟悉web...

  • 2019-01-17

    python websocket 应用总结 首先要了解websocket原理,知乎上有很多大神的答复,多看看就了解...

  • WebSocket小试牛刀

    WebSocket小试牛刀 一. 为什么需要WebSocket? 1.1 初次接触 WebSocket 的人,都会...

  • WebSocket

    本文介绍 WebSocket 协议的使用方法。 一、为什么需要 WebSocket? 初次接触 WebSocket...

网友评论

    本文标题:你需要了解的WebSocket

    本文链接:https://www.haomeiwen.com/subject/obvqdctx.html