var myWebsocket = { websocket : null, clientPrefix : "", clientId : "", default : { type : "", url : "", onmessage : null, //将消息显示在网页上 setConsoleOut : function setConsoleOut(innerHTML) { console.log(innerHTML); } }, initWebsocket : function(data){ var type = ""; var setConsoleOut = null; var url = ""; if(!data){ alert("url is empty"); return; } type = data.type ? data.type + "_" : myWebsocket.default.type; if(data.onmessage){ myWebsocket.default.onmessage = data.onmessage; } myWebsocket.clientPrefix = "client_" + type; sessionStorage.clientPrefix = myWebsocket.clientPrefix; myWebsocket.clientId = myWebsocket.clientPrefix + Math.uuid().replace(/-/g,""); sessionStorage.clientId = myWebsocket.clientId; if(!data.url){ alert("url is empty"); return; } url = data.url + "/socketServer/" + myWebsocket.clientId; setConsoleOut = data.setConsoleOut ? data.setConsoleOut : myWebsocket.default.setConsoleOut; //判断当前浏览器是否支持WebSocket, 主要此处要更换为自己的地址 if ('WebSocket' in window) { setConsoleOut(url); myWebsocket.websocket = new WebSocket(url); } else { setConsoleOut('Not support websocket'); } //连接发生错误的回调方法 myWebsocket.websocket.onerror = function() { setConsoleOut("error"); }; //连接成功建立的回调方法 myWebsocket.websocket.onopen = function(event) { setConsoleOut("open"); } //接收到消息的回调方法 myWebsocket.websocket.onmessage = function(event) { setConsoleOut(event.data); if(myWebsocket.default.onmessage){ myWebsocket.default.onmessage(event.data); } } //连接关闭的回调方法 myWebsocket.websocket.onclose = function() { setConsoleOut("close"); } //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = function() { if(myWebsocket.websocket){ myWebsocket.websocket.close(); } } }, sendWebsocket : function(message) { if(myWebsocket.websocket){ console.log(message); myWebsocket.websocket.send(message); } }, closeWebSocket : function () { if(myWebsocket.websocket){ myWebsocket.websocket.close(); } } }; /*! Math.uuid.js (v1.4) http://www.broofa.com mailto:robert@broofa.com Copyright (c) 2010 Robert Kieffer Dual licensed under the MIT and GPL licenses. */ /* * Generate a random uuid. * * USAGE: Math.uuid(length, radix) * length - the desired number of characters * radix - the number of allowable values for each character. * * EXAMPLES: * // No arguments - returns RFC4122, version 4 ID * >>> Math.uuid() * "92329D39-6F5C-4520-ABFC-AAB64544E172" * * // One argument - returns ID of the specified length * >>> Math.uuid(15) // 15 character ID (default base=62) * "VcydxgltxrVZSTV" * * // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62) * >>> Math.uuid(8, 2) // 8 character ID (base=2) * "01001010" * >>> Math.uuid(8, 10) // 8 character ID (base=10) * "47473046" * >>> Math.uuid(8, 16) // 8 character ID (base=16) * "098F4D35" */ (function() { // Private array of chars to use var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); Math.uuid = function (len, radix) { var chars = CHARS, uuid = [], i; radix = radix || chars.length; if (len) { // Compact form for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; } else { // rfc4122, version 4 form var r; // rfc4122 requires these characters uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; // Fill in random data. At i==19 set the high bits of clock sequence as // per rfc4122, sec. 4.1.5 for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random()*16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); }; // A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance // by minimizing calls to random() Math.uuidFast = function() { var chars = CHARS, uuid = new Array(36), rnd=0, r; for (var i = 0; i < 36; i++) { if (i==8 || i==13 || i==18 || i==23) { uuid[i] = '-'; } else if (i==14) { uuid[i] = '4'; } else { if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0; r = rnd & 0xf; rnd = rnd >> 4; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } return uuid.join(''); }; // A more compact, but less performant, RFC4122v4 solution: Math.uuidCompact = function() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }); }; })();