【JS】WebSocket:实现实时通信功能。

【JS】WebSocket:实现实时通信功能。

如果想需要websocket实现功能,后端也要进行对应的修改配置,本内容只讲前端部分,想了解后端如何让实现的自行查阅资料。

一、WebSocket是什么?

  1. WebSocket是一种网络通信协议
  2. webSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。

二、为什么需要WebSocket?

初次接触WebSocket的人,都会问同样的问题:我们已经有了HTTP协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为HTTP协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP协议做不到服务器主动向客户端推送信息。传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据,这种客户端是主动方,服务端是被动方的传统Web模式对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应用。

三、WebSocket的优势

1.支持双向通信:WebSocket 允许客户端和服务器之间进行实时双向通信,使得数据可以在两者之间实时传输。

2.减少网络拥堵:由于 WebSocket

连接是持久的,因此它只在必要时传输数据,而不是频繁地发起请求和响应,从而减少了网络拥堵,极大的节省了网络带宽资源的消耗。

3.更小的控制开销:相比于 HTTP,WebSocket 的控制开销更小。因为WebSocket 连接一旦建立,就可以直接传输数据,不需要每次通信都携带完整的头部信息。

4.支持二进制数据传输:WebSocket 支持二进制数据传输,使得它可以传输更丰富的数据类型,如图像、视频等。

5.支持扩展:WebSocket 协议定义了扩展机制,用户可以根据需要扩展协议或实现自定义的子协议。

四、WebSocket实现方式

  • WebSocket需要像TCP一样,先建立连接,需要客户端和服务端进行握手连接,连接成功后才能相互通信。

(1)WebSocket构造函数

WebSocket对象作为一个构造函数,用于新建WebSocket实例。

javascript 复制代码
// ws://127.0.0.1:8090连接地址,后端提供的访问地址
let ws = new websocket("ws://127.0.0.1:8090")

执行上面的语句之后,客户端就会与服务器进行连接。

(2)websocket.readyState
readyState属性返回实例对象的当前状态,共有四种。

javascript 复制代码
CONNECTING:值为0,表示正在连接。
OPEN:值为1,表示连接成功,可以通信了。
CLOSING:值为2,表示连接正在关闭。
CLOSED:值为3,表示连接已经关闭,或者打开连接失败。

(3)webSocket.onopen

实例对象的onopen属性,用于指定连接成功后的回调函数。

javascript 复制代码
ws.onopen = function  {
  alert( "websocket连接成功")
}

(4)webSocket.onerror

连接发生错误的回调方法

javascript 复制代码
ws.onerror = function ( {
	alert( ""websocket连接发生错误"">
}

(5)webSocket.onmessage

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

javascript 复制代码
ws.onmessage = function (data) i
	alert(data)
}

(6)websocket.onclose

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

javascript 复制代码
ws.onclose = function ( {
	alert("websocket连接关闭")
}

(7)websocket.send()

实例对象的send()方法用于向服务器发送数据。

javascript 复制代码
ws.send( ' your message ' ) ;

五、示例1:实时数据展示


六、示例2:实现简易聊天室

相关推荐
swipe10 小时前
从 0 到 1 实现大文件上传:分片、秒传、断点续传、暂停、重试与服务端合并
前端·javascript·面试
kyriewen12 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
kisshyshy12 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
胡志辉12 小时前
从v8源码和react深入浅出理解 JavaScript 作用域链与闭包
前端·javascript
Bolt13 小时前
TypeScript 7.0 来了:当 tsc 用 Go 重写之后
javascript·typescript·go
阳火锅15 小时前
😭测试小姐姐终于不骂我了!这个提BUG神器太香了...
前端·javascript·面试
林希_Rachel_傻希希17 小时前
js里面的proxy理解。以及vue3响应式数据设计底层
前端·javascript·面试
阿黎梨梨17 小时前
AI Loop:告别“人肉写提示词”,让代码替你“鞭策”AI
javascript·人工智能
竹林81820 小时前
用 wagmi v2 + viem 监听链上事件,我踩了三天坑终于搞懂了实时日志与历史补全
javascript
只一21 小时前
😭从回调地狱到 async/await:一文打通 Ajax 与 JS 异步编程
javascript