socket.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import config from '@/config/index';
  2. let websocket = null; //全局WebSocket对象
  3. let lockReconnect = false; // 网络断开重连
  4. let wsCreateHandler = null; // 创建连接
  5. export function createSocket(fn, err) {
  6. try {
  7. if ('WebSocket' in window) websocket = new window.WebSocket(config.base.ws);
  8. else if ('MozWebSocket' in window)
  9. websocket = new window.MozWebSocket(config.base.ws);
  10. else reconnect(err);
  11. } catch {
  12. reconnect(err);
  13. return;
  14. }
  15. websocket.onmessage = function (data) {
  16. fn &&
  17. fn({
  18. ws: websocket,
  19. data: JSON.parse(data.data),
  20. });
  21. };
  22. websocket.onopen = function (event) {
  23. // websocket.send("连接成功");
  24. console.log('服务已连接', event);
  25. };
  26. websocket.onclose = function (event) {
  27. console.log('服务连接关闭', event);
  28. };
  29. websocket.onerror = function (event) {
  30. console.log(event, '连接出错');
  31. err && err();
  32. };
  33. }
  34. /**
  35. * 异常处理
  36. * 处理可以检测到的异常,并尝试重新连接
  37. */
  38. function reconnect(err) {
  39. if (lockReconnect) {
  40. return;
  41. }
  42. err && err();
  43. console.log('reconnect', err);
  44. lockReconnect = true;
  45. // 没链接上会一直连接,设置延迟,避免过多请求
  46. wsCreateHandler && clearTimeout(wsCreateHandler);
  47. wsCreateHandler = setTimeout(function () {
  48. console.log('-----websoket异常-------');
  49. createSocket();
  50. lockReconnect = false;
  51. }, 1000);
  52. }