js中的WebSocket使用及说明

 更新时间:2024年02月28日 09:38:00   作者:Lemon今天学习了吗  
这篇文章主要介绍了js中的WebSocket使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、WebSocket定义

html5提供的单个TCP连接上进行全双工通信的协议。

WebSocket允许服务端主动向客户端推送数据

在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

二、WebSocket特点

在实现数据推送时,多数都是ajax轮询(在特定的时间间隔,由浏览器主动发起请求,会占用很多带宽和服务器资源)。

而WebSocket建立TCP连接后,服务器可以主动给客户端传递数据,能够更好的节省服务器资源和带宽,实现更实时的数据通讯。

因为WebSockets只能通过连接发送纯文本数据和二进制数据,所以对于复杂的数据结构,在通过连接发送之前,必须进行JSON.stringify()序列化。

协议标识符是ws(加密则为wss),服务器网址就是 URL。

如“ws://localhost:8080"。

三、WebSocket用法

WebSocket的所有操作都是采用事件的方式触发的,这样不会阻塞UI,使得UI有更快的响应时间和更好的用户体验。

浏览器通过Javascript向服务器发出建立WebSocket连接的请求,连接建立后,客户端和服务器就可以通过TCP连接直接交换数据。

当获取WebSocket连接后,可以通过send()方法向服务器发送数据,可以通过onmessage事件接收服务器返回的数据。

实例

var ws = new WebSocket(path [,protocols]);

path:要连接的 URL,这应该是 WebSocket 服务器将响应的 URL。

protocols(可选):一个协议字符串或者一个包含协议字符串的数组。

属性

ws.readyState
ws.bufferedAmount

...

方法

ws.send()

ws.close()

事件

ws.onopen

ws.onmessage

ws.close

ws.onerror

//创建一个webSocket实例,执行后,客户端就会与服务端连接
var ws = new WebSocket("ws://localhost:8080"); 
 
//当WebSocket创建成功时,触发onopen事件
ws.onopen = function(){
    console.log("open");
    // 复杂的数据结构,在通过连接发送之前,必须进行序列化。 
    const json = JSON.stringify({
		type: 'keepalive',
		id: ''
	});
   ws.send(json); //将消息发送到服务端
}
 
//当客户端收到服务端发来的消息时,触发onmessage事件
ws.onmessage = function(e){
    //e.data 的数据格式也是字符串,手动解析这些数据才能得到其他格式的数据。
    const _data = JSON.parse(e.data); 
  console.log(e.data,_data);
}
 
//当客户端收到服务端发送的关闭连接请求时,触发onclose事件
ws.onclose = function(e){
  console.log("close");
}
 
//如果出现连接、处理、接收、发送数据失败的时候触发onerror事件
ws.onerror = function(e){
  console.log(error);
}

四、Http与WebSocket的区别

http协议是短链接,因为请求之后,都会关闭连接,下次重新请求数据,需要再次打开连接。

WebSocket协议是一种长连接,只需要通过一次请求来初始化链接,然后所有的请求和响应都是通过这个TCP链接进行通信。

五、WebSocket和Socket的区别

Socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。

而WebSocket则不同,它是一个完整的应用层协议,包含一套标准的API。

六、利用socket.io实现简易聊天室思路

  • 客户端通过发送io.connect(url)连接请求与服务器端进行连接(若不适用socket.io库,使用new WebSocket(url)可以发送连接请求);
  • 服务器端通过监听‘connection’事件处理连接请求io.on(‘connection’,function(socket){//发送open事件});
  • 客户端通过监听open事件确认是否与服务器端进行连接;
  • 客户端通过send方法向服务器端发送信息;
  • 服务器端通过监听message方法监听send的发送信息,并处理发送信息(将信息广播给其他聊天室成员和自己);
  • 服务器端通过监听disconnect方法判断客户端请求是否断开;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 为什么JavaScript没有块级作用域

    为什么JavaScript没有块级作用域

    这篇文章主要介绍了为什么JavaScript没有块级作用域的相关资料,需要的朋友可以参考下
    2016-05-05
  • JavaScript 抽奖效果实现代码 数字跳动版

    JavaScript 抽奖效果实现代码 数字跳动版

    直接上代码吧,效果可以复制了去看
    2009-11-11
  • JavaScript中数据结构与算法(二):队列

    JavaScript中数据结构与算法(二):队列

    这篇文章主要介绍了JavaScript中数据结构与算法(二):队列,队列是只允许在一端进行插入操作,另一个进行删除操作的线性表,队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,需要的朋友可以参考下
    2015-06-06
  • javascript,jquery闭包概念分析

    javascript,jquery闭包概念分析

    偶尔听人说javascript闭包,让我联想起以前学编译原理和数字逻辑里讲的闭包,以前上课讲的闭包很难懂,而且含有递归的意思在里面,现在不想再查看里面的闭包概念。
    2010-06-06
  • webpack自动引入打包资源HtmlWebpackPlugin的实现

    webpack自动引入打包资源HtmlWebpackPlugin的实现

    本文主要介绍了webpack自动引入打包资源HtmlWebpackPlugin的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • javascript FormatNumber函数实现方法

    javascript FormatNumber函数实现方法

    如果有一个数字498.8573945,如何把它格式化成两位小数据呢?用过asp的都知道,在vbscript里我们可以调用formatnumber,即用formatnumber(498.8573945,2)就可以输出:498.86。
    2008-12-12
  • 浅谈JavaScript的函数及作用域

    浅谈JavaScript的函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,借助此文一起来巩固下学习的内容吧。
    2016-12-12
  • JavaScript DOM元素常见操作详解【添加、删除、修改等】

    JavaScript DOM元素常见操作详解【添加、删除、修改等】

    这篇文章主要介绍了JavaScript DOM元素常见操作,包括针对dom元素的添加、删除、修改等相关操作实现技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  • layui 监听表格复选框选中值的方法

    layui 监听表格复选框选中值的方法

    今天小编就为大家分享一篇layui 监听表格复选框选中值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • JavaScript实现随机点名小程序

    JavaScript实现随机点名小程序

    这篇文章主要介绍了JavaScript实现随机点名小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10

最新评论