WebSocket插件
;!(function(window){ "use strict"; let Event = { wsMesEvent:function(message){ console.log(message) } } ,dftOpt = { protocol:(window.location.protocol == 'http:') ? 'ws://' : 'wss://' ,host:window.location.host ,port:'80' ,path:'' ,isReConect:false ,wsMesEvent:Event.wsMesEvent } ,Util = { arrayLike(arrayLike){ Array.from(arrayLike)} ,isArray(arr){Array.isArray(arr)} ,forEach(array,iterate){ let index = -1 ,length = array.length; if(typeof iterate != 'function'){return array;} while (++index < length) { iterate.call(array,array[index], index); } } ,isPlainObject(obj){ let flag = false; if(!obj || typeof obj != 'object'){return flag;} if(obj.constructor.prototype.hasOwnProperty("isPrototypeOf")){ flag = true; } return flag; } ,extend(...args){ if(args.length <= 0){return}; let target = args[0]; if(args.length == 1){return args[0]}; this.forEach(args,(arg,i) => { if(i!=0){ var keys = Object.keys(arg); this.forEach(keys,(key,i) => { var val = arg[key]; if(this.isPlainObject(val) || this.isArray(val)){ var newTarget = this.isArray(val)?[]:{}; target[key] = this.extend(newTarget,val); }else{ target[key] = val; } }); } }); return target; } } ,Ws = function (opt) { //如果浏览器不支持websocket,直接退出 if(!this.isSupportWs()){ alert("对不起,您的浏览器在不支持WebSocket,请先升级您的浏览器!!"); return; } let config = this.config = Util.extend({},dftOpt,opt); //接口地址url this.url = config.protocol + config.host +':'+config.port + config.path; //心跳状态 为false时不能执行操作 等待重连 this.isHeartBeat = false ; //重连状态 避免不间断的重连操作 this.isReconnect = config.isReConect; //发送的消息 this.curSendMes = null; //响应的信息 this.message = null; //创建webSocket this.ws; //初始化websocket this.initWs = function(){ //创建WebSocket let ws = this.ws = new WebSocket(this.url); //Ws连接函数:服务器连接成功 ws.onopen = (e) => { console.log(`与${this.config.host}:${this.config.port}${this.config.path}连接已建立...`) this.isHeartBeat = true; //发布事件 this.send(); }; //Ws消息接收函数:服务器向前端推送消息时触发 ws.onmessage = (e) => { //处理各种推送消 this.message = e.data; config.wsMesEvent.apply(this,[e.data]); } //Ws异常事件:Ws报错后触发 ws.onerror = (e) => { this.isHeartBeat = false; this.reConnect(); } //Ws关闭事件:Ws连接关闭后触发 ws.onclose = (e) => { console.log('连接已关闭...'); this.isHeartBeat = false; ws = null; this.reConnect(); }; }; this.initWs(); }; //判断是否支持WebSocket Ws.prototype.isSupportWs = function(){ return (window.WebSocket || window.MozWebSocket)?true:false; } //重新连接 Ws.prototype.reConnect = function () { //不需要重新连接,直接返回 if(!this.isReconnect) return; this.isReconnect = true; //没连接上 会一直重连,设置延迟避免请求过多 setTimeout(()=>{ this.initWs() this.isReconnect = false; }, 5000); } //发送消息 Ws.prototype.send = function(content){ this.curSendMes = content || this.curSendMes; if(this.isHeartBeat){ this.ws.send(this.curSendMes); } } window.Ws = Ws; })(window); /*** * 使用方式: * //建立连接 * var ws1 = new Ws({ * host:'123.207.167.163' * ,port:9010 * ,path:'/ajaxchattest' * ,wsMesEvent:function(message){ * console.log(message) * } * }); * //发送请求 * ws1.send("111"); * * //建立连接 * var ws2 = new Ws({ * host:'123.207.167.163' * ,port:9010 * ,path:'/ajaxchattest' * ,wsMesEvent:function(message){ * console.log(message) * } * }); * //发送请求 * ws2.send("222"); * */
WebSocket插件的更多相关文章
- Jmeter websocket插件安装与使用
Jmeter websocket插件安装与使用 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试 ...
- Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。
题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...
- Jquery封装: WebSocket插件
1 $(function() { var websocket = null; //浏览器是否支持websocket if ("WebSocket" in window) { try ...
- sockjs+stomp的websocket插件
/** * 依赖文件sockjs.js.stomp.js * */ ;!(function (window) { 'use strict' let WS = function () { //保存所有的 ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- [Openfire]使用WebSocket建立Openfire的客户端
近日工作闲暇之余,对IM系统产生了兴趣,转而研究了IM的内容.找了半天,知道比较流行的是Openfire的系统,Openfire有许多平台实现,由于我是做Web的,所以当然是希望寻找Web的实现.Op ...
- vue各种插件汇总
https://blog.csdn.net/wh8_2011/article/details/80497620(copy) Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一 ...
- VUE插件大总结
UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开 ...
- vue插件大全汇总
Vue是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作 ...
随机推荐
- 关于thinkphp框架中模型笔记
模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...
- LSTM神经网络走读
0设计概述 RNN梯度爆炸和消失比较严重,RNN隐层只有一个状态h记录短期记忆,增加一个长期记忆状态c似乎就可以解决问题.
- Flink整合oozie shell Action 提交任务 带kerberos认证
最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题 还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少,手动滑稽 集 ...
- PHP实现阿里云OSS文件上传(支持批量)
上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下: 1.下载阿里云OSS对象上传SDK(P ...
- 【RabbitMQ 实战指南】一 延迟队列
1.什么是延迟队列 延迟队列中存储延迟消息,延迟消息是指当消息被发送到队列中不会立即消费,而是等待一段时间后再消费该消息. 延迟队列很多应用场景,一个典型的应用场景是订单未支付超时取消,用户下单之后3 ...
- fenby C语言 P22
#include <stdio.h> int main(){ char array[]={'t','o','m','c','a','t'}; int i; for(i=0;i<6;i ...
- iOS开发 swift 3dTouch实现 附代码
iOS开发 swift 3dTouch实现 附代码 一.What? 从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反 ...
- SSM简历模板1.0
张三 xxx-xxxx-xxxx| xxxxxxx@qq.com| 南京 x岁 | 籍贯:江苏 已离职 | 求职意向:java开发工程师 | 期望薪资:面议 专业技能 1.熟悉MVC体系结构模式.B/ ...
- 小白学 Python(16):基础数据类型(函数)(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- SpringBoot自定义starter及自动配置
SpringBoot的核心就是自动配置,而支持自动配置的是一个个starter项目.除了官方已有的starter,用户自己也可以根据规则自定义自己的starter项目. 自定义starter条件 自动 ...