websock.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. let websock = $ref(""); //webSocket使用
  2. let isConnect = $ref(false); //webSocket连接标识 避免重复连接
  3. let reConnectNum = $ref(1); //断开后重新连接的次数 免得后台挂了,前端一直重连
  4. const conceal = () => {
  5. websockList.value = [];
  6. };
  7. const websocketonopen = () => {
  8. // console.log("WebSocket连接成功");
  9. //连接建立后修改标识
  10. isConnect = true;
  11. };
  12. const websocketonerror = () => {
  13. console.log("WebSocket连接发生错误");
  14. //连接断开后修改标识
  15. isConnect = false;
  16. //连接错误 需要重连
  17. reConnect();
  18. };
  19. const websocketonmessage = (e) => {
  20. if (e != null) {
  21. // console.log('websocketclose', e)
  22. let str = JSON.parse(e.data);
  23. // category : "SYS"
  24. // content : "您有一个通知公告,请查阅!"
  25. // createTime : 1670322927873
  26. // createUser : "1543837863788879871"
  27. // deleteFlag : "NOT_DELETE"
  28. // id : "1600076448078106626"
  29. // msgType : 1
  30. // subject : "您有一个通知公告,请查阅!"
  31. websockList.value = JSON.parse(JSON.stringify(str));
  32. }
  33. };
  34. // webSocket连接关闭
  35. const websocketclose = () => {
  36. // console.log("webSocket连接关闭");
  37. isConnect = false;
  38. websock = "";
  39. reConnect();
  40. };
  41. // 尝试重新连接
  42. const reConnect = () => {
  43. if (reConnectNum > 6) {
  44. // console.log("重连超过6次不再重连");
  45. return false;
  46. }
  47. // console.log("isConnect", isConnect, $store.getters.userId);
  48. //如果已经连上就不再重试了
  49. if (isConnect && !$store.getters.userId) return;
  50. initWebSocket($store.getters.userId);
  51. reConnectNum = reConnectNum + 1;
  52. };
  53. const initWebSocket = (userId) => {
  54. // console.log("进入initWebSocket");
  55. // console.log("系统用户ID:" + userId);
  56. if (userId != null && userId != "") {
  57. // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
  58. const env = import.meta.env.VITE_API_BASEURL.split("://");
  59. let wsServer = `${env[0] === "https" ? "wss" : "ws"}://${
  60. env[1]
  61. }/socket/message/${userId}`;
  62. // console.info("location.protocol", wsServer);
  63. //线上环境
  64. //webSocket 前面加一个前缀xxx_websocket_ 区分后面其他项目的webSocket
  65. // let wsServer = "wss://域名地址或ip加端口/ nginx配置的 xxx_websocket/" + userId;
  66. websock = new WebSocket(wsServer);
  67. websock.onopen = websocketonopen;
  68. websock.onerror = websocketonerror;
  69. websock.onmessage = websocketonmessage;
  70. websock.onclose = websocketclose;
  71. }
  72. };