问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于WebSocket的问题 为什么浏览器关闭后会出一下异常

发布网友 发布时间:2022-04-29 17:57

我来回答

2个回答

懂视网 时间:2022-04-22 14:34

这个看出客户端要通过很多次询问后,才能知道服务端什么时候准备就绪,这样如果发送请求的客户特别多,请求频率特别高这无疑会给服务端造成了不小的压力。

如果有那么一种方式可以让服务端想客户端推送消息,就可以完美解决这一情况,于是WebSocket出现了。

WebSocket的使用

WebSocket是HTML5的新协议,所以支持HTML5的浏览器都能直接使用WebSocket不需要额外安装,什么开发包,或者插件。

为了测试WebSocket我们需要简单的搞一个服务端程序。Node.js本身支持的协议包括TCP协议和HTTP协议,但不支持WebSocket,为了让让node也支持WebSocket,这里我选用ws模块。

测试

创建一个名为testWebSocket的文件夹,使用npm init 初始化项目

配置package.json文件添加,这里选用ws的最新的版本

"dependencies": {
  "ws": "^6.2.1"
}

在根目录使用npm指令npm install --save,把ws相关依赖都拉下来。

然后创建一个名为myWebSocketServer.js的文件,一个简单的WebSocket服务端程序完成,

node myWebSocketServer.js先让服务端跑起来。相关教程:webSocket 视频教程

// 导入WebSocket模块:
const WebSocket = require('ws');
let i = 1;

// 引用Server类:
const WebSocketServer = WebSocket.Server;

// 实例化:
const myWs = new WebSocketServer({
port: 8080
});

myWs.on('connection', ws => {
ws.on('message', message => {
console.log('received: %s', message);
});

setInterval(() => {
ws.send('Hello siegaii this is serverMessage!' + i);
i++;
}, 1000);

});

客户端

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<button id="test">hello siegaii</button>

<script>
let ws = new WebSocket('ws://localhost:8080/testWebSocket');
document.getElementById('test').addEventListener('click', () => {
ws.send('Hello Siegaii this is clientMessage!');
});

// 响应onmessage事件:
ws.onmessage = (msg) => {
console.log(msg);
};

</script>
</body>
</html>

运行结果如下

API

简单介绍下WebSocket的api

// WebSocket Api
let socket = new WebSocket(url, [protocol] ); // 实例化一个WebSocket对象建立连接
/**
* socket的readyState属性
* 0 - 表示连接尚未建立。
* 1 - 表示连接已建立,可以进行通信。
* 2 - 表示连接正在进行关闭。
* 3 - 表示连接已经关闭或者连接不能打开。
*/
socket.readyState

/**
* 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。
*/
socket.bufferedAmount

/**
* WebSocket 事件
*/
socket.onopen(); //连接建立时触发
socket.onmessage(); //客户端接收服务端数据时触发
socket.onerror(); //通信发生错误时触发
socket.onclose(); //连接关闭时触发

/**
* WebSocket 方法
*/
Socket.send() //使用连接发送数据
Socket.close() //关闭连接

热心网友 时间:2022-04-22 11:42

这是因为websocket还没完全关闭之前,浏览器就已经关闭了,不过不影响正常使用就是了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
淘宝买家差评删除流程是什么?具体步骤介绍 神拳李青多少钱 《英雄联盟》盲僧新皮肤睁眼介绍_《英雄联盟》盲僧新皮肤睁眼是什么_百 ... 至高之拳李青高清壁纸至高之拳李青 盲僧金虾皮肤致敬哥哥张国荣 新版皮肤爱的初体验 英雄联盟盲僧神龙尊者皮肤一览 QQ输入法手机版如何进入输入法设置菜单 福来者福往爱出者爱返是什么意思 电脑开机后鼠标自动移动 速度还非常快 为什么总有一大堆验证码发到我手机上。 夏天里的成长讲了一个什么故事? 我看见风也蓝了雪黄黄和粉色的海洋是什么歌的歌词 websocket连接不上、报错或自动关闭是什么原因?怎么解决? 英国雷迪RD8100管线仪性能好? 抖音名字怎么写是记录宝宝成长的 学Java好还是html5好啊 QQ空间相册访问记录怎么不显示我的足迹? 雷迪金属探测器使用的程序是什么 手机qq怎么关闭最近相片 一个手机可以同时登录2个吗? 夏天里的成长读后感600字? 五一假期即将到来,你知道哪些地方适合旅行? 平安新e家里离职了能看到个人信息不 男朋友一下子硬,一下子软,是不是太累了 websocket连接不上、报错、自动关闭,求解 夏天里的成长内容? 雷迪8000金属探测仪湖北区域代理 到底学习java好?还是html5好? 我看见了风这篇短文每个自然段都用什么作为开头 婴儿抖音封面怎么写 华为dig一tl10是什么型号? html5 java学哪个比较好 为什么WebSocket建立成功后关闭wifi,server不能立即响应onclose.201 到底是学Java好,还是学前端HTML5好 《夏天里的成长》活生生的意思是什么? 端午假期来临,你知道哪些适合游玩的地方? 如何避免websocket重复连接 懂的人指点一下,html5和java哪个好学点 夏天里的成长是一篇散文启迪,我们什么什么。 英国雷迪RD8100底线管线探测仪有没有配置锂电池版本的,接收机用干电池太麻烦了 怎么支付宝不像微信那样子随便加好友的嘛 为什么男人的鸡巴有时候会硬,有时候软,也会射精子? 怎样添加四川电信公众号 Java和html5 学哪个最好 还请不吝赐教 同一个人用两个手机两个号码能用一个微信吗 管线探测有几种方法?分别用哪几种设备?这几种设备分别能探测多深的管线? 怎么关注天翼防骚扰公众号? 使用雷迪地下管线探测仪怎么探测出深度是多少?比如管线直径是273.1×5.6 该怎么选择,JAVA跟HTML5? 河南电信公众号