websocket.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { Message } from 'element-ui'
  2. // import { getToken } from '@/utils/authToken' // 与后端的协商,websocket请求需要带上token参数
  3. let websock = null
  4. let messageCallback = null
  5. let errorCallback = null
  6. let tryTime = 0
  7. // 接收ws后端返回的数据
  8. function websocketonmessage (e) {
  9. messageCallback(JSON.parse(e.data))
  10. }
  11. /**
  12. * 发起websocket连接
  13. * @param {Object} agentData 需要向后台传递的参数数据
  14. */
  15. function websocketSend (agentData) {
  16. // 加延迟是为了尽量让ws连接状态变为OPEN
  17. setTimeout(() => {
  18. // 添加状态判断,当为OPEN时,发送消息
  19. if (websock.readyState === websock.OPEN) { // websock.OPEN = 1
  20. // 发给后端的数据需要字符串化
  21. websock.send(JSON.stringify(agentData))
  22. }
  23. if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3
  24. console.log('websock.readyState=3')
  25. // Message.error('ws连接异常,请稍候重试')
  26. errorCallback()
  27. }
  28. }, 500)
  29. }
  30. // 关闭ws连接
  31. function websocketclose (e) {
  32. // e.code === 1000 表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
  33. // e.code !== 1000 表示非正常关闭。
  34. if (e && e.code !== 1000) {
  35. // Message.error('ws连接异常,请稍候重试')
  36. errorCallback()
  37. // // 如果需要设置异常重连则可替换为下面的代码,自行进行测试
  38. // if (tryTime < 10) {
  39. // setTimeout(function() {
  40. // websock = null
  41. // tryTime++
  42. // initWebSocket()
  43. // console.log(`第${tryTime}次重连`)
  44. // }, 3 * 1000)
  45. //} else {
  46. // Message.error('重连失败!请稍后重试')
  47. //}
  48. }
  49. }
  50. // 建立ws连接
  51. function websocketOpen (e) {
  52. // console.log('ws连接成功')
  53. }
  54. // 初始化weosocket
  55. function initWebSocket (wsUrl) {
  56. if (typeof (WebSocket) === 'undefined') {
  57. Message.error('您的浏览器不支持WebSocket,无法获取数据')
  58. return false
  59. }
  60. // const token = Cookies.get('token')
  61. // // ws请求完整地址
  62. // const requstWsUrl = wsUrl + '?' + token
  63. // websock = new WebSocket(requstWsUrl)
  64. websock = new WebSocket(wsUrl)
  65. websock.onmessage = function (e) {
  66. websocketonmessage(e)
  67. }
  68. websock.onopen = function () {
  69. websocketOpen()
  70. }
  71. websock.onerror = function () {
  72. // Message.error('ws连接异常,请稍候重试')
  73. errorCallback()
  74. }
  75. websock.onclose = function (e) {
  76. websocketclose(e)
  77. }
  78. }
  79. /**
  80. * 发起websocket请求函数
  81. * @param {string} url ws连接地址
  82. * @param {Object} agentData 传给后台的参数
  83. * @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数
  84. * @param {function} errCallback ws连接错误的回调函数
  85. */
  86. export function sendWebsocket (url, agentData, successCallback, errCallback) {
  87. url
  88. initWebSocket(url)
  89. messageCallback = successCallback
  90. errorCallback = errCallback
  91. websocketSend(agentData)
  92. }
  93. /**
  94. * 关闭websocket函数
  95. */
  96. export function closeWebsocket () {
  97. if (websock) {
  98. websock.close() // 关闭websocket
  99. websock.onclose() // 关闭websocket
  100. }
  101. }