websocket.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. var myWebsocket = {
  2. websocket : null,
  3. clientPrefix : "",
  4. clientId : "",
  5. default : {
  6. type : "",
  7. url : "",
  8. onmessage : null,
  9. //将消息显示在网页上
  10. setConsoleOut : function setConsoleOut(innerHTML) {
  11. console.log(innerHTML);
  12. }
  13. },
  14. initWebsocket : function(data){
  15. var type = "";
  16. var setConsoleOut = null;
  17. var url = "";
  18. if(!data){
  19. alert("url is empty");
  20. return;
  21. }
  22. type = data.type ? data.type + "_" : myWebsocket.default.type;
  23. if(data.onmessage){
  24. myWebsocket.default.onmessage = data.onmessage;
  25. }
  26. myWebsocket.clientPrefix = "client_" + type;
  27. sessionStorage.clientPrefix = myWebsocket.clientPrefix;
  28. myWebsocket.clientId = myWebsocket.clientPrefix + Math.uuid().replace(/-/g,"");
  29. sessionStorage.clientId = myWebsocket.clientId;
  30. if(!data.url){
  31. alert("url is empty");
  32. return;
  33. }
  34. url = data.url + "/socketServer/" + myWebsocket.clientId;
  35. setConsoleOut = data.setConsoleOut ? data.setConsoleOut : myWebsocket.default.setConsoleOut;
  36. //判断当前浏览器是否支持WebSocket, 主要此处要更换为自己的地址
  37. if ('WebSocket' in window) {
  38. setConsoleOut(url);
  39. myWebsocket.websocket = new WebSocket(url);
  40. } else {
  41. setConsoleOut('Not support websocket');
  42. }
  43. //连接发生错误的回调方法
  44. myWebsocket.websocket.onerror = function() {
  45. setConsoleOut("error");
  46. };
  47. //连接成功建立的回调方法
  48. myWebsocket.websocket.onopen = function(event) {
  49. setConsoleOut("open");
  50. }
  51. //接收到消息的回调方法
  52. myWebsocket.websocket.onmessage = function(event) {
  53. setConsoleOut(event.data);
  54. if(myWebsocket.default.onmessage){
  55. myWebsocket.default.onmessage(event.data);
  56. }
  57. }
  58. //连接关闭的回调方法
  59. myWebsocket.websocket.onclose = function() {
  60. setConsoleOut("close");
  61. }
  62. //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
  63. window.onbeforeunload = function() {
  64. if(myWebsocket.websocket){
  65. myWebsocket.websocket.close();
  66. }
  67. }
  68. },
  69. sendWebsocket : function(message) {
  70. if(myWebsocket.websocket){
  71. console.log(message);
  72. myWebsocket.websocket.send(message);
  73. }
  74. },
  75. closeWebSocket : function () {
  76. if(myWebsocket.websocket){
  77. myWebsocket.websocket.close();
  78. }
  79. }
  80. };
  81. /*!
  82. Math.uuid.js (v1.4)
  83. http://www.broofa.com
  84. mailto:robert@broofa.com
  85. Copyright (c) 2010 Robert Kieffer
  86. Dual licensed under the MIT and GPL licenses.
  87. */
  88. /*
  89. * Generate a random uuid.
  90. *
  91. * USAGE: Math.uuid(length, radix)
  92. * length - the desired number of characters
  93. * radix - the number of allowable values for each character.
  94. *
  95. * EXAMPLES:
  96. * // No arguments - returns RFC4122, version 4 ID
  97. * >>> Math.uuid()
  98. * "92329D39-6F5C-4520-ABFC-AAB64544E172"
  99. *
  100. * // One argument - returns ID of the specified length
  101. * >>> Math.uuid(15) // 15 character ID (default base=62)
  102. * "VcydxgltxrVZSTV"
  103. *
  104. * // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)
  105. * >>> Math.uuid(8, 2) // 8 character ID (base=2)
  106. * "01001010"
  107. * >>> Math.uuid(8, 10) // 8 character ID (base=10)
  108. * "47473046"
  109. * >>> Math.uuid(8, 16) // 8 character ID (base=16)
  110. * "098F4D35"
  111. */
  112. (function() {
  113. // Private array of chars to use
  114. var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  115. Math.uuid = function (len, radix) {
  116. var chars = CHARS, uuid = [], i;
  117. radix = radix || chars.length;
  118. if (len) {
  119. // Compact form
  120. for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
  121. } else {
  122. // rfc4122, version 4 form
  123. var r;
  124. // rfc4122 requires these characters
  125. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  126. uuid[14] = '4';
  127. // Fill in random data. At i==19 set the high bits of clock sequence as
  128. // per rfc4122, sec. 4.1.5
  129. for (i = 0; i < 36; i++) {
  130. if (!uuid[i]) {
  131. r = 0 | Math.random()*16;
  132. uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  133. }
  134. }
  135. }
  136. return uuid.join('');
  137. };
  138. // A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance
  139. // by minimizing calls to random()
  140. Math.uuidFast = function() {
  141. var chars = CHARS, uuid = new Array(36), rnd=0, r;
  142. for (var i = 0; i < 36; i++) {
  143. if (i==8 || i==13 || i==18 || i==23) {
  144. uuid[i] = '-';
  145. } else if (i==14) {
  146. uuid[i] = '4';
  147. } else {
  148. if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;
  149. r = rnd & 0xf;
  150. rnd = rnd >> 4;
  151. uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  152. }
  153. }
  154. return uuid.join('');
  155. };
  156. // A more compact, but less performant, RFC4122v4 solution:
  157. Math.uuidCompact = function() {
  158. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  159. var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
  160. return v.toString(16);
  161. });
  162. };
  163. })();