📅  最后修改于: 2023-12-03 15:05:55.550000             🧑  作者: Mango
WebSockets API 是一种用于在浏览器和服务器之间建立长久连接的协议。它提供了一种双向数据传输的机制,使得服务器可以主动向浏览器发送信息,而不是只在浏览器向服务器请求数据时才返回响应。这使得实时应用程序(如聊天应用程序)得以更加高效地运行,同时也为其他用途(如在线游戏、实时协作等)提供了便利。
WebSockets API 基于 HTTP 协议,但是它只需要一个简单的握手然后就可以跳到一种低延时、轻量级的传输方式。WebSockets API 和 HTTP 的主要区别是,HTTP 是单向的,请求数据只能从客户端向服务器发送,而 WebSockets API 则是双向的,消息可以从服务器主动向客户端推送。此外,HTTP 为每个请求和响应都创建一个新的连接,而 WebSockets API 则创建一个持久性的连接,它可以在同一持久性连接上发送多个消息,从而减少了连接管理的开销。
WebSockets API 由以下几个部分组成:
WebSocket 对象是 WebSockets API 的核心。它是一个 JavaScript 对象,用于创建 WebSocket 连接,并提供发送和接收消息的方法。
创建一个 WebSocket 连接:
const connection = new WebSocket('ws://localhost:8080');
接收连接事件:
connection.addEventListener('open', (event) => {
console.log('连接成功');
});
接收错误事件:
connection.addEventListener('error', (event) => {
console.log('连接错误');
});
接收消息事件:
connection.addEventListener('message', (event) => {
console.log('收到消息:', event.data);
});
发送消息:
connection.send('Hello, server!');
关闭连接:
connection.close();
WebSocketServer 对象用于创建和管理 WebSocket 服务器,并提供接收和发送消息的方法。它是一个 Node.js 模块。
创建 WebSocket 服务器:
const WebSocketServer = require('websocket').server;
const http = require('http');
const server = http.createServer((request, response) => {
// 处理 HTTP 请求
});
server.listen(8080, () => {
console.log('WebSocket 服务器已启动');
});
const wsServer = new WebSocketServer({
httpServer: server,
});
// 处理新连接
wsServer.on('request', (request) => {
const connection = request.accept(null, request.origin);
// 处理消息
connection.on('message', (message) => {
console.log('收到消息:', message.utf8Data);
});
// 连接关闭
connection.on('close', (reasonCode, description) => {
console.log('连接关闭');
});
});
WebSocketFrame 对象用于表示 WebSockets API 中的数据帧。数据帧包含消息的实际数据和其他元数据,如消息类型和长度等。
WebSocketEvent 对象表示 WebSockets API 中的事件,如打开连接、关闭连接和收到消息等事件。
WebSockets API 在现代浏览器中都有很好的支持。不过,旧版本的浏览器可能不支持它,因此在使用之前需要检查浏览器的支持程度。
WebSockets API 提供了一种高效的双向数据传输机制,使得实时应用程序可以更加高效地运行。它是基于 HTTP 协议的,但是提供了更低延时、轻量级的传输方式。WebSockets API 包含了 WebSocket、WebSocketServer、WebSocketFrame 和 WebSocketEvent 等一系列对象和事件,使得我们可以方便地创建和管理 WebSocket 连接。