前言
Websocket 是一种用于在服务器和客户端之间实现高效的双向通信的机制,通过WebSocket ,其目的是在应用 和服务器 进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高了工作效率和资源利用率。
WebSocket相关
1. 构造函数
WebSocket(url,protocols) 构造函器会返回一个 WebSocket 对象。
url 指WebSocket服务器将响应的URL。 protocols 可选字段,代表选择的子协议。
2. 常用属性
WebSocket.url 是一个只读属性,对应构造函数创建WebSocket 实例对象时的URL 。WebSocket.readyState 返回当前WebSocket 的链接状态,只读。对应值为整型,如下:
0 (WebSocket.CONNECTING) 正在链接中 1 (WebSocket.OPEN) 已经链接并且可以通讯 2 (WebSocket.CLOSING) 连接正在关闭 3 (WebSocket.CLOSED) 连接已关闭或者没有链接成功 WebSocket.onopen 属性定义建立连接并可以通讯时触发的回调函数,也就是readyState 变为1 时调用;WebSocket.onmessage 该属性定义一个当收到来自服务器的消息时触发的回调函数。WebSocket.onerror 定义一个发生错误时执行的回调函数,此事件的事件名为"error"。WebSocket.onclose 属性返回一个事件监听器,这个事件监听器将在 WebSocket 连接的readyState 变为3 时被调用。
websocket封装
websocket.js 代码如下:
function isJSON(str) {
if (typeof str === 'string') {
try {
const obj = JSON.parse(str);
if (typeof obj === 'object' && obj) {
return true;
}
return false;
} catch (e) {
console.log('error:' + str + '!!!' + e);
return false;
}
}
return false;
}
class Socket {
constructor(params) {
window.WebSocket = window.WebSocket || window.MozWebSocket;
if (!window.WebSocket) {
console.error('错误: 浏览器不支持websocket');
return;
}
this.websocket = null;
this.params = params;
this.socketInit(params);
}
socketInit({
url, onopen, onmessage, onerror, onclose,
}) {
if (url !== undefined) {
this.websocket = new WebSocket(url);
this.websocket.onopen = (e) => {
console.log('连接成功', e);
if (typeof onopen === 'function') {
onopen(e);
}
};
this.websocket.onmessage = (e) => {
console.log('接收数据', e);
if (typeof onmessage === 'function') {
const res = isJSON(e.data) ? JSON.parse(e.data) : e.data;
onmessage(res);
}
};
this.websocket.onclose = (e) => {
console.log('连接关闭', e);
if (typeof onclose === 'function') {
onclose(e);
}
};
this.websocket.onerror = (e) => {
console.log('连接异常', e);
if (typeof onerror === 'function') {
onerror(e);
}
};
}
}
send(message) {
if (!this.websocket || this.websocket.readyState !== 1) {
console.log('请确认websocket是否已经链接并且可以通讯');
return;
}
this.websocket.send(JSON.stringify(message));
}
close() {
if (!this.websocket) {
console.log('websocket 不可用');
return;
}
this.websocket.close();
}
}
export default Socket;
使用方式
代码如下(示例):
import Socket from '@/utils/websocket';
let websocket;
const params = {
url: 'ws://127.0.0.1:8081',
onopen: () => {
const token = "xxxx"
websocket.send(token);
},
onmessage: (res) => {
},
onclose: () => {
},
};
websocket = new Socket(params);
业务处理完可以手动关闭连接
websocket.close();
|