网页与多个服务器建立websoc,同一个页面怎么发起多个websocket
不是很明白如此刁钻的需求存在的意义。
当然,刁钻只是说在一个页面搞多个连接过于奢侈,对而言服务器更加奢侈。刁钻归刁钻,实现起来没有难度,参考 JavaScript 面向对象编程的任一方案,将连接对象的生成过程批量化或者封装成构造函数,每次需要建立连接的时候创建一个新的通信连接就可以了,还有收到消息之后要记得关闭连接,不然可能会因浏览器并发请求数量的限制而导致新连接失败,如果实现的时候产生闭包,还要考虑内存暴涨甚至泄露的问题。
// 工厂模式
fucntion establishSocket(options){
const socket = new WebSocket(options.url);
socket.open();
let messageQueue ; // 临时存储需要发送的信息
// 这里不考虑复用连接的情况,因为连接复用需要自定义通信协议
let messageHandler ; // 暂存消息处理回调函数
let errorHandler ; // 暂存错误处理回调函数
const handler = {
socket,
send: message => {
if(socket.readyState === 1){
socket.send(message)
} else {
messageQueue = message;
}
return {
then: (resolve, reject) => {
messageHandler = resolve;
errorHandler = reject;
}
}
}
};
socket.onopen = () => {
if(messageQueue){
socket.send(messageQueue);
}
};
socket.onmessage = e => {
if(messageHandler instanceof Function){
messageHandler(e);
messageHandler = null;
} else {
throw new Error('DEVELOP_ERROR: No webSocket response handler!')
};
socket.close();
};
socket.onerror = err => {
if(errorHandler instanceof Fucntion){
errorHandler(err);
errorHandler = null;
} else {
throw new Error(err);
}
}
// 这里的 return 会产生闭包,过多连接可能导致浏览器卡顿甚至崩溃
return handler;
}
// 使用的时候
establishSocket({url: 'your.socket.server.url'}).send('your message').then(e => {
// 在这里处理服务器返回的消息
});
以上代码没有测试过,不对其运行结果负责,毕竟单一页面内建立多个 socket 连接,始终不是一个好的设计方案,还不如使用 http 请求。
网页与多个服务器建立websoc,同一个页面怎么发起多个websocket相关推荐
- 网页如何与mysql服务器建立连接不上,html与mysql建立连接数据库
html与mysql建立连接数据库 内容精选 换一换 云数据库 GaussDB(for MySQL)是华为云提供的一款安全.可信的数据库服务.GaussDB(for MySQL)秉承华为云对租户的安全 ...
- 为什么mac Safari提示:打不开该网页,因为无法与服务器建立安全的链接?
我遇到的情况: 就百度打不开,当时电脑日期时间是不对的. 解决: 把日期改正后,百度也好了.
- 修改服务器404页面,服务器上的404页面做了有什么好处?
当网站被调整或页面被修改时,将有页面被删除.重命名或移动.此时,虽然相应内容的页面仍然存在于网站中,但它们不能通过使用原始地址访问,或者由于拼写错误的无效链接不能返回到用户想要的信息,需要跳转到第40 ...
- 网页服务器和mysql服务器_实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法...
实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法 发布时间:2020-04-15 16:42:41 来源:亿速云 阅读:133 作者:三月 栏目:数据库 亿速云负载均衡(Cloud ...
- 学习JSP——在虚拟机中建立一个JSP网页,通过Tomcat服务器发布,并通过虚拟机的宿主机浏览器访问虚拟机上所发布的JSP网页
1.介绍JSP (1)简介 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是 ...
- 网页如何与服务器连接到服务器,怎样把网页连接到云服务器上
怎样把网页连接到云服务器上 内容精选 换一换 对于使用第三方VR运行环境(如SteamVR)的用户,GPU云服务器创建完成或重启后,建议用户在连接头显设备前先进行房间设置,即登录GPU云服务器配置环境 ...
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)...
之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...
- 服务器无效响应状态码12029,使用wininet发送http请求时出现12029无法与服务器建立连接...
使用winiet开发http请求的时候出现 12029无法与服务器建立连接 找啦很长时间才找到的错误. 错误描述: 请求如下地址: http://www.xxx.com:8888 返回12029错误 ...
- 按照一定策略把网页抓回到搜索引擎服务器的,SEO新手学习:搜索引擎的基本步骤...
初始搜索引擎的原理:第一步就是需要了解"搜索引擎的基本步骤". 搜索引擎的基本步骤(大概架构)如下.可以分成虚线左右两个部分:一部分是搜索引擎抓取:主动抓取网页进行一系列处理后建立 ...
- 部署网页到华为云服务器,把网页部署到云服务器
把网页部署到云服务器 内容精选 换一换 介绍SAP应用弹性伸缩的部署方案. 部署提供可视化.一键式部署服务,支持并行部署和流水线无缝集成,实现部署环境标准化和部署过程自动化.本节通过以下四步介绍如何使 ...
最新文章
- 给自己的Sublime Text换上Soda Theme主题后清爽了好多
- mysql 5.3 build4.234_mysql版本3.23跟4.1区别
- C# 动态加载 动态卸载
- 美团笔试题——公司食堂
- ijkplayer-hook协议实现分析
- mysql生成uui mybatis,MyBatis自动生成UUID并返回
- JAVA JDBC常见面试题及答案
- Atitit java rest mvc微服务原理以及框架选型 目录 第一节 Mvc原理 model controler view	1 第二章 Spark 最简单	1 第一节 Sprbt to
- Pascal 转 C++ 教程1
- 注册一个北京公司可以申请办理京牌吗,好申请吗?
- opc服务器变量为空,OPC客户机上浏览不到OPC服务器上的变量
- 网站变成灰色(置灰)
- (附源码)ssm考生评分系统 毕业设计 071114
- 如何更改AutoCAD软件图纸背景颜色?
- 冷喷涂服务行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- sap成本流怎么看_[原创]SAP方丈-写给新手的SAP成本核算流程
- 土豆网前任CTO开无人便利店,半年达500家
- 【智能材料】用人工智能发现新型材料,金属玻璃可替代钢材
- react组件类型及深入理解react高阶组件
- MPEG2-TS格式