本文目录导读:
WebSocket 是一种在单个 TCP 连接上进行全又双工通讯的协议,在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
WebSocket 通信原理
1、建立连接:客户端通过发送一个特殊的 HTTP 请求到服务器,这个请求和通常的 HTTP 请求不同,包含了一些附加的头信息,其中包含了表示请求协议升级为 WebSocket 的信息,如果服务器支持 WebSocket,那么会返回101状态码。
2、数据传输:连接建立之后,客户端和服务器之间就形成了一个全双工的通道,双方都可以通过这个通道发送数据。
3、关闭连接:当客户端或服务器需要关闭连接时,会发送一个特殊的数据帧给对端,对方收到后会立即关闭连接。
WebSocket 通信实践
在实际应用中,WebSocket 主要用于实时通信,如在线聊天、实时数据更新等,下面是一个使用 JavaScript 和 WebSocket 实现的简单聊天室示例:
1、我们需要在服务器端创建一个 WebSocket 服务器,这里我们使用 Node.js 的ws
库:
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', ws => { ws.on('message', message => { wss.clients.forEach(client => { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(message); } }); }); });
2、在客户端,我们可以创建一个 WebSocket 连接,并监听消息事件:
<!DOCTYPE html> <html> <body> <script> const ws = new WebSocket('ws://localhost:8080'); ws.addEventListener('open', (event) => { ws.send('Hello Server!'); }); ws.addEventListener('message', (event) => { console.log('Message from server: ', event.data); }); </script> </body> </html>
在这个示例中,当客户端连接到服务器时,会发送一条消息 "Hello Server!",服务器会将这条消息广播给所有已连接的客户端。
WebSocket 通信的优势
1、建立在 TCP 协议之上,传输控制协议的可靠性和稳定性得到了保障。
2、与 HTTP 协议有良好的兼容性,默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易被防火墙拦截。
3、数据格式比较轻量,性能开销小,通信高效。
4、可以发送文本,也可以发送二进制数据。
5、没有同源限制,客户端可以与任意服务器通信。
WebSocket 通信是一种高效、可靠的实时通信方式,广泛应用于各种实时应用中,理解其原理和实践方法,对于前端开发者来说非常重要。