不是很明白如此刁钻的需求存在的意义。

当然,刁钻只是说在一个页面搞多个连接过于奢侈,对而言服务器更加奢侈。刁钻归刁钻,实现起来没有难度,参考 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相关推荐

  1. 网页如何与mysql服务器建立连接不上,html与mysql建立连接数据库

    html与mysql建立连接数据库 内容精选 换一换 云数据库 GaussDB(for MySQL)是华为云提供的一款安全.可信的数据库服务.GaussDB(for MySQL)秉承华为云对租户的安全 ...

  2. 为什么mac Safari提示:打不开该网页,因为无法与服务器建立安全的链接?

    我遇到的情况: 就百度打不开,当时电脑日期时间是不对的. 解决: 把日期改正后,百度也好了.

  3. 修改服务器404页面,服务器上的404页面做了有什么好处?

    当网站被调整或页面被修改时,将有页面被删除.重命名或移动.此时,虽然相应内容的页面仍然存在于网站中,但它们不能通过使用原始地址访问,或者由于拼写错误的无效链接不能返回到用户想要的信息,需要跳转到第40 ...

  4. 网页服务器和mysql服务器_实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法...

    实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法 发布时间:2020-04-15 16:42:41 来源:亿速云 阅读:133 作者:三月 栏目:数据库 亿速云负载均衡(Cloud ...

  5. 学习JSP——在虚拟机中建立一个JSP网页,通过Tomcat服务器发布,并通过虚拟机的宿主机浏览器访问虚拟机上所发布的JSP网页

    1.介绍JSP (1)简介 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是 ...

  6. 网页如何与服务器连接到服务器,怎样把网页连接到云服务器上

    怎样把网页连接到云服务器上 内容精选 换一换 对于使用第三方VR运行环境(如SteamVR)的用户,GPU云服务器创建完成或重启后,建议用户在连接头显设备前先进行房间设置,即登录GPU云服务器配置环境 ...

  7. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)...

    之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...

  8. 服务器无效响应状态码12029,使用wininet发送http请求时出现12029无法与服务器建立连接...

    使用winiet开发http请求的时候出现 12029无法与服务器建立连接  找啦很长时间才找到的错误. 错误描述: 请求如下地址: http://www.xxx.com:8888 返回12029错误 ...

  9. 按照一定策略把网页抓回到搜索引擎服务器的,SEO新手学习:搜索引擎的基本步骤...

    初始搜索引擎的原理:第一步就是需要了解"搜索引擎的基本步骤". 搜索引擎的基本步骤(大概架构)如下.可以分成虚线左右两个部分:一部分是搜索引擎抓取:主动抓取网页进行一系列处理后建立 ...

  10. 部署网页到华为云服务器,把网页部署到云服务器

    把网页部署到云服务器 内容精选 换一换 介绍SAP应用弹性伸缩的部署方案. 部署提供可视化.一键式部署服务,支持并行部署和流水线无缝集成,实现部署环境标准化和部署过程自动化.本节通过以下四步介绍如何使 ...

最新文章

  1. 给自己的Sublime Text换上Soda Theme主题后清爽了好多
  2. mysql 5.3 build4.234_mysql版本3.23跟4.1区别
  3. C# 动态加载 动态卸载
  4. 美团笔试题——公司食堂
  5. ijkplayer-hook协议实现分析
  6. mysql生成uui mybatis,MyBatis自动生成UUID并返回
  7. JAVA JDBC常见面试题及答案
  8. Atitit java rest mvc微服务原理以及框架选型 目录 第一节 Mvc原理 model controler view 1 第二章 Spark 最简单 1 第一节 Sprbt to
  9. Pascal 转 C++ 教程1
  10. 注册一个北京公司可以申请办理京牌吗,好申请吗?
  11. opc服务器变量为空,OPC客户机上浏览不到OPC服务器上的变量
  12. 网站变成灰色(置灰)
  13. (附源码)ssm考生评分系统 毕业设计 071114
  14. 如何更改AutoCAD软件图纸背景颜色?
  15. 冷喷涂服务行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  16. sap成本流怎么看_[原创]SAP方丈-写给新手的SAP成本核算流程
  17. 土豆网前任CTO开无人便利店,半年达500家
  18. 【智能材料】用人工智能发现新型材料,金属玻璃可替代钢材
  19. react组件类型及深入理解react高阶组件
  20. MPEG2-TS格式

热门文章

  1. The Productive Programmer 读书笔记
  2. javascript毫秒计时器_JS制作计时器毫秒
  3. 2019网易雷火笔试编程题
  4. 3D MAX插件大全介绍
  5. 西门子s7-200解密软件下载_西门子S7200软件工具——调试应用程序
  6. 又发现几个宝藏网站系列(二)
  7. 查看.pth文件里面保存了哪些权重及那些权重的shape
  8. 伺服驱动器方案,迈信ep100 成熟方案STM32源码
  9. 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
  10. tomcat6升级到tomcat7配置的修改