JavaScript 连接 websocket 服务

本文介绍了一个使用JavaScript实现的WebSocket连接类,支持自动重连功能。该类通过判断浏览器是否支持WebSocket,创建连接并处理连接状态,包括打开、关闭、错误和消息事件。同时,提供了发送数据的方法,并在连接断开时自动尝试重新连接。
function TWebSocket(opt) {
    var that = this;
    that.isWS = !!window.WebSocket;
    that.isOpen = false;
    that.autoConnect = false;
    that.options = opt;
    if (that.options.reconnect) that.autoConnect = true;
    that._connect.call(that);
}

TWebSocket.prototype.send = function (e) {
    var that = this;
    if (that.isOpen) {
        that._WS.send(e);
        return true;
    }
    return false;
}
TWebSocket.prototype._connect = function () {
    var that = this;
    try {
        that._WS = new WebSocket(that.options.url);
        that.isWS = true;
    } catch (_) {
        that._WS = null;
    }
    if (that.isWS) {
        that._WS.onopen = function (e) {
            that.isOpen = true;
            if (that.options.onopen) {
                that.options.onopen.call(that, e);
            }
        }
        that._WS.onclose = function (e) {
            that.isOpen = false;
            if (that.autoConnect) that.reconnect();
            if (that.options.onclose) {
                that.options.onclose.call(that, e);
            }
        }
        that._WS.onerror = function (e) {
            that.isOpen = false;
            if (that.autoConnect) that.reconnect();
            if (that.options.onerror) {
                that.options.onerror.call(that, e);
            }
        }
        that._WS.onmessage = function (e) {
            if (that.options.onmessage) {
                that.options.onmessage.call(that, e);
            }
        }
    }
}
TWebSocket.prototype.reconnect = function (t) {
    var that = this;
    if (!that.isOpen) {
        if (that._RCT) clearTimeout(that._RCT);
        that._RCT=setTimeout(function () {
            that._connect.call(that);
        }, isNaN(t) ? 5000 : t * 1000)
    }
}
var myWs = new TWebSocket({
            url: "ws://127.0.0.1:8132",
            reconnect: true,//自动重连
            onerror:function(e){
            },
            onmessage: function (msg) {
                console.log(msg.data);
            }
        });

myWs.send("send data");

 

<think>首先,用户的问题是:“我想使用JavaScript建立WebSocket连接的方法 请问JavaScript 连接 WebSocket 示例代码”。这是一个关于在JavaScript中使用WebSocket的请求。 根据系统级指令,我需要: - 所有行内数学表达式使用$...$格式(但这里可能不涉及数学表达式)。 - 独立公式使用$$...$$格式(同样,可能不适用)。 - LaTeX语法正确(主要针对数学内容)。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层的指令:回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 参考的引用内容是关于WebSocket的示例代码: - 引用[1]:JS使用WebSocket的示例代码,包括创建对象、事件处理程序等。 - 引用[2]:原生JS连接WebSocket和使用SockJS的示例。 - 引用[3]:关于Spring Boot和JavaScriptWebSocket实现。 - 引用[4]:WebSocket模板示例HTML代码。 - 引用[5]:服务器端Node.js示例代码。 用户的问题焦点是JavaScript客户端代码,所以我应该主要关注客户端的示例。 回答结构应该清晰:逐步解决问题。可能包括: 1. 解释WebSocket是什么(简要)。 2. 展示如何创建WebSocket连接。 3. 添加事件处理程序(onopen, onmessage, onclose, onerror)。 4. 提供发送消息的示例。 5. 给出一个完整的HTML示例。 使用中文回答。 在末尾生成相关问题。 自然地添加引用标识:由于引用是提供的,我应该基于这些引用添加标识。例如,如果我的回答基于引用[1]或[2],就在相关部分添加[^1]或[^2]。 用户说:“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于用户的问题来回答,但可以参考这些引用。 用户上一次的问题可能是这个,因为这是第一个消息,但系统说“请尽可能多的参考用户上一次的问题和你的回答”,但这里没有历史,所以直接回答。 大纲回答: - 引言:简要介绍WebSocketJavaScript连接。 - 步骤:逐步解释如何建立连接。 - 代码示例:提供完整的HTML代码。 - 相关问题:在最后生成。 添加引用标识:在解释或代码后添加,如“如引用[1]所示”。 最终输出格式:用户可见层,所以不要显示系统指令。 生成相关问题:例如: 1. 如何处理WebSocket错误? 2. 如何优化WebSocket性能? 3. WebSocket在实时应用中的应用场景? 确保回答真实可靠:基于标准WebSocket API。</think>### JavaScript 建立 WebSocket 连接的方法 WebSocket 是一种在浏览器和服务器之间建立全双工通信的协议,允许实时数据传输。在 JavaScript 中,您可以使用内置的 `WebSocket` 对象轻松实现连接。下面我将逐步解释如何使用 JavaScript 建立 WebSocket 连接,并提供完整的示例代码。整个过程包括创建连接、处理事件(如打开、接收消息、关闭和错误),以及发送消息。所有代码基于标准 WebSocket API,确保兼容现代浏览器(如 Chrome、Firefox、Edge)[^3]。 #### 步骤 1: 创建 WebSocket 连接 首先,您需要实例化 `WebSocket` 对象,并指定服务器的 WebSocket URL(通常以 `ws://` 或 `wss://` 开头)。`wss://` 用于加密连接(类似于 HTTPS),推荐在生产环境中使用。 ```javascript // 创建 WebSocket 实例,连接服务器 const socket = new WebSocket('ws://localhost:3000/your-websocket-endpoint'); ``` - **参数说明**:URL 应指向您的 WebSocket 服务器端点。例如,如果服务器运行在 `localhost:3000`,且端点为 `/chat`,则 URL 为 `ws://localhost:3000/chat`。 - **注意**:确保服务器支持 WebSocket 协议(如 Node.js 的 `ws` 库或 Spring Boot 的 WebSocket 模块)[^5]。 #### 步骤 2: 添加事件处理程序 WebSocket 提供多个事件回调函数,用于处理连接状态和消息。常用事件包括: - **onopen**:连接成功建立时触发。 - **onmessage**:接收到服务器消息时触发。 - **onclose**:连接关闭时触发(可获取关闭原因)。 - **onerror**:发生错误时触发(如网络问题)。 ```javascript // 当连接成功打开时 socket.onopen = function(event) { console.log('WebSocket 连接已建立', event); // 可以在此发送初始消息 socket.send('Hello Server!'); }; // 当接收到服务器消息时 socket.onmessage = function(event) { console.log('收到消息:', event.data); // event.data 包含消息内容 // 在此处理消息,例如更新 UI }; // 当连接关闭时 socket.onclose = function(event) { console.log('连接已关闭', event.code, event.reason); // 可以尝试重连或提示用户 }; // 当发生错误时 socket.onerror = function(error) { console.error('WebSocket 错误:', error); // 处理错误,如显示错误信息 }; ``` #### 步骤 3: 发送消息 使用 `socket.send()` 方法向服务器发送消息。消息可以是字符串、Blob 或 ArrayBuffer 类型。通常,发送文本消息如下: ```javascript // 发送消息的函数 function sendMessage() { const message = document.getElementById('messageInput').value; // 获取输入框内容 if (socket.readyState === WebSocket.OPEN) { // 确保连接处于打开状态 socket.send(message); } else { console.error('连接未打开,无法发送消息'); } } ``` #### 完整 HTML 示例代码 以下是一个简单的 WebSocket 客户端实现,包含一个输入框和按钮用于发送消息。将代码保存为 HTML 文件并在浏览器中打开即可测试(需确保服务器运行中)[^4]。 ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>JavaScript WebSocket 示例</title> </head> <body> <h1>WebSocket 测试</h1> <div> <input type="text" id="messageInput" placeholder="输入消息" value="Hello, WebSocket!"> <button onclick="sendMessage()">发送消息</button> </div> <div id="output"></div> <!-- 用于显示接收到的消息 --> <script> // 创建 WebSocket 连接(替换为您的服务器 URL) const socket = new WebSocket('ws://localhost:3000/echo'); // 事件处理程序 socket.onopen = function(event) { console.log('连接已建立'); document.getElementById('output').innerHTML += '<p>连接成功!</p>'; }; socket.onmessage = function(event) { console.log('收到消息:', event.data); document.getElementById('output').innerHTML += `<p>服务器回复: ${event.data}</p>`; }; socket.onclose = function(event) { console.log('连接关闭', event.code, event.reason); document.getElementById('output').innerHTML += '<p>连接已关闭</p>'; }; socket.onerror = function(error) { console.error('错误:', error); document.getElementById('output').innerHTML += '<p>发生错误,请检查服务器</p>'; }; // 发送消息的函数 function sendMessage() { const input = document.getElementById('messageInput'); const message = input.value; if (socket.readyState === WebSocket.OPEN) { socket.send(message); document.getElementById('output').innerHTML += `<p>已发送: ${message}</p>`; input.value = ''; // 清空输入框 } else { alert('连接未准备好,请稍后重试'); } } </script> </body> </html> ``` #### 注意事项 - **服务器端实现**:此代码仅展示客户端部分。服务器端需使用 Node.js、Spring Boot 或其他框架处理 WebSocket 连接(如引用[5]中的 Node.js 示例)[^5]。 - **兼容性**:WebSocket 支持大多数现代浏览器,但不支持老旧浏览器(如 IE10 以下)。您可以使用 polyfill 库(如 SockJS)作为备选方案(如引用[2]所示)[^2]。 - **安全**:在生产环境中,使用 `wss://` 加密连接,并处理跨域问题(CORS)。 - **调试**:打开浏览器的开发者工具(F12)查看控制台日志,帮助排查问题。 通过以上步骤,您可以轻松在 JavaScript 中建立 WebSocket 连接,实现实时通信功能。如果连接失败,请检查服务器状态和 URL 是否正确[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值