WebSocket 简介
来源:互联网 发布:淘宝刷平台有哪些 编辑:程序博客网 时间:2024/06/04 00:41
传统的http请求是有请求才会有响应,在websocket中只要客户端没有断开websocket链接,就不需要客户端向服务端发起请求,
通过Sec-WebSocket-Key的base64的编码,要求服务器返回一个对应加密的Sec-WebSocket-Accept应答
//客户端api示例 var ws = new WebSocket("wss://echo.websocket.org");//申请一个WebSocket对象参数是链接服务器的地址,使用ws或wss(安全的)开头 ws.onopen = function(){ws.send("test!");}; // 当browser(浏览器) 和WebSocketServer链接成功后触发noopen ws.onmessage = function(evt){console.log(evt.data);ws.close();};//当browser接收到发过来的数据后执行onmessage消息,evt参数包含Server传过来的数据 ws.onclose = function(evt){console.log("WebSocket is closed!");};//当browser接收到服务器传过来的close请求后触发onclose消息, ws.onerror = function(evt){console.log("WebSocket is Error!");}; //当链接失败或者出现错误时就会触发onerror。
案例介绍:我们是一个手机app软件商,需要实时的获取每个打开app用户的地理位置,设备上线,离线,上报时都要获取设备的地理位置,并精确到秒,我们用A设备对这些手机进行监管,如果用传统的HTTP协议的话,每次A设备都回去询问手机(轮询),当下线时,造成了网络浪费,势必会对A设备带来负载压力。方案解决:采用WebSocket技术实现推送,当手机打开app后,就与a设备建立长链接,实时的向a设备推送当前地理位置,当用户下线时,向a设备发送关闭消息。WebSocket客户端:a设备和手机设备的WebSocket客户端封装在websocket.js的代码中,与Jqurey MobileApp一同打包为移动端apk/ipa安装包。WebSocket服务端:主要为WebSocketDeviceServlet.java,WebSockDeviceInbound.java,websocketDeviceInboundPool.java这几个类中这里只讨论客户端
var websocket=window.WebSocket || window.MozWebSocket; var isConnected = false; function doOpen(){ isConnected = true; if(deviceType=='B'){ mapArea='mapB'; doLoginB(mapArea); } else{ mapArea='mapA'; doLoginA(mapArea); } } function doClose(){ showDiagMsg("infoField","已经断开连接", "infoDialog"); isConnected = false; } function doError() { showDiagMsg("infoField","连接异常!", "infoDialog"); isConnected = false; } function doMessage(message){ var event = $.parseJSON(message.data); doReciveEvent(event); } function doSend(message) { if (websocket != null) { websocket.send(JSON.stringify(message)); } else { showDiagMsg("infoField","您已经掉线,无法与服务器通信!", "infoDialog"); } } //初始话 WebSocket function initWebSocket(wcUrl) { if (window.WebSocket) { websocket = new WebSocket(encodeURI(wcUrl)); websocket.onopen = doOpen; websocket.onerror = doError; websocket.onclose = doClose; websocket.onmessage = doMessage; } else{ showDiagMsg("infoField","您的设备不支持 webSocket!", "infoDialog"); } }; function doReciveEvent(event){ //设备不存在,客户端断开连接 if(event.eventType==101){ showDiagMsg("infoField","设备不存在或设备号密码错!", "infoDialog"); websocket.close(); } //返回组设备及计算目标位置信息,更新地图 else if(event.eventType==104||event.eventType==103){ clearGMapOverlays(mapB); $.each(event.eventObjs,function(idx,item){ var deviceNm = item.deviceNm; //google api // var deviceLocale = new google.maps.LatLng(item.lag,item.lat); //baidu api var deviceLocale = new BMap.Point(item.lng,item.lat); var newMarker; if(item.status=='target'){ newMarker = addMarkToMap(mapB,deviceLocale,deviceNm,true); //…以下代码省略 } else{ newMarker = addMarkToMap(mapB,deviceLocale,deviceNm); } markArray.push(newMarker); }); showDiagMsg("infoField","有新报修设备或设备离线, 地图已更新!", "infoDialog"); } }
阅读全文
0 0
- WebSocket 简介
- WebSocket简介
- WebSocket简介
- WebSocket简介
- Websocket简介
- WebSocket简介
- websocket 简介
- WebSocket简介
- websocket 简介
- WebSocket 简介
- websocket 简介
- websocket 简介
- WebSocket简介
- WebSocket API简介
- android WebSocket协议简介
- WebSocket简介一
- WebSocket协议简介
- HTML5 WebSocket简介
- There is no getter for property named 'name' in 'class java.lang.Integer'
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛—I
- 6379-为何Redis选择它作为默认端口号?
- 用SSM搭建restful API协议框架
- MFC向Excel读取、写入数据(OLE/COM)
- WebSocket 简介
- LinkedHashMap源码剖析
- 在已经安装的nginx上,增加ssl模块
- 大数据架构简述(二):数据获取
- Android之二维码生成并添加Logo
- Codeforces 812B Sagheer, the Hausmeister[dp]
- Java日志框架slf4j、jcl、jul、log4j1、log4j2、logback大总结
- mybatis中的mapper接口文件以及example类的实例函数以及详解
- GraphQL第一个例子