当前位置:首页 > JavaScript

js 实现websocket

2026-03-02 06:01:30JavaScript

使用原生 JavaScript 实现 WebSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适用于实时应用如聊天、游戏等。以下是实现步骤:

1. 创建 WebSocket 连接

通过 WebSocket 构造函数创建连接,参数为 WebSocket 服务器地址:

const socket = new WebSocket('ws://example.com/socket');

2. 监听连接事件

WebSocket 提供以下事件监听:

  • onopen:连接建立时触发
  • onmessage:接收到消息时触发
  • onerror:发生错误时触发
  • onclose:连接关闭时触发
socket.onopen = function(event) {
    console.log('Connection established');
};

socket.onmessage = function(event) {
    console.log('Message received:', event.data);
};

socket.onerror = function(error) {
    console.error('Error occurred:', error);
};

socket.onclose = function(event) {
    console.log('Connection closed');
};

3. 发送数据

使用 send() 方法发送数据,支持字符串、ArrayBufferBlob 格式:

socket.send('Hello, server!');

4. 关闭连接

调用 close() 方法关闭连接:

socket.close();

完整示例代码

const socket = new WebSocket('ws://example.com/socket');

socket.onopen = function() {
    console.log('Connected to server');
    socket.send('Hello, server!');
};

socket.onmessage = function(event) {
    console.log('Server says:', event.data);
};

socket.onerror = function(error) {
    console.error('WebSocket error:', error);
};

socket.onclose = function() {
    console.log('Disconnected from server');
};

// 关闭连接示例
setTimeout(() => {
    socket.close();
}, 5000);

注意事项

  • 协议需使用 ws://(非加密)或 wss://(加密)。
  • 发送数据前需确保连接已建立(readyState === WebSocket.OPEN)。
  • 跨域问题需服务器配置 Access-Control-Allow-Origin
  • 心跳机制可避免连接超时断开。

进阶功能

1. 二进制数据传输

发送 ArrayBufferBlob

const buffer = new ArrayBuffer(8);
socket.send(buffer);

2. 自定义协议

通过子协议扩展功能:

const socket = new WebSocket('ws://example.com/socket', ['custom-protocol']);

3. 重连机制

onclose 中实现自动重连:

js 实现websocket

function connect() {
    const socket = new WebSocket('ws://example.com/socket');
    socket.onclose = function() {
        setTimeout(connect, 1000); // 1秒后重连
    };
}
connect();

通过以上方法,可以快速实现 WebSocket 通信并处理常见场景。

标签: jswebsocket
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…