当前位置:   article > 正文

vue3 websocket实现心跳

vue3 websocket实现心跳

实现场景

  该需求是运用websocket进行网页之间通讯,同时保证websocket在通讯期间保持激活的状态。

功能分析

   1、在websocket报错时,重新苏醒。

   2、在websocket自动关闭时,重新连接。

   3、在通讯期间,整个websocket能接受消息,并通过不同的消息,进行加载不同的数据和交互

   4、websocket实例化时,主动加入房间。

代码实施

  1. const initWebSocket = () => {
  2. try {
  3. if ('WebSocket' in window) {
  4. ws.value = new WebSocket(serveUrl + '/ws')
  5. heartForm.value.time = 1
  6. modelData.value.lockReconnect = true
  7. modelData.value.isAlive = false
  8. //建立连接时,钩子函数,当连接状态正常时,会执行钩子函数
  9. ws.value.onopen = onOpen
  10. //绑定 收到websocket返回的消息钩子函数
  11. ws.value.onmessage = onMessage
  12. //报错后,重新连接
  13. ws.value.onerror = function (e) {
  14. initWebSocket()
  15. }
  16. //关闭后,直接重新连接
  17. ws.value.onclose = function (e) {
  18. initWebSocket()
  19. }
  20. } else {
  21. alert('当前浏览器 Not support websocket')
  22. }
  23. } catch (e) {
  24. reconnect()
  25. }
  26. }
  27. const reconnect = () => {
  28. if (modelData.value.lockReconnect) return;
  29. modelData.value.lockReconnect = true;
  30. setTimeout(function () { //没连接上会一直重连,设置延迟避免请求过多
  31. initWebSocket()
  32. modelData.value.lockReconnect = false;
  33. }, 2000);
  34. }
  35. //打开状态
  36. const onOpen = (e) => {
  37. }
  38. }
  39. //接受信息
  40. const onMessage = (e) => {
  41. }

  

遇到的问题

        1、websocket每次实例化时,都要将onerror,onmessage,onclose,onopen 重新实例化。

        2、onmessage获取到的是所有的数据,需要对传送过来的信息进行过滤

        3、websockt在使用一段时间后,长时间未使用,有可能断开连接,需要重新连接。

总结分享

        1、这里后端未做心跳检测,就直接前端以定时器轮询的方式,不断进行连接,知道websocket重新连接上位置;

        2、主要的接受到消息的逻辑都是在onmessage里面,里面的逻辑比较复杂,需要根据实际的场景进行设定。

        3、onopen在在正式连接成功之后,会执行的方法。需要加入房间的操作,可以放入这里面。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/641751
推荐阅读
相关标签
  

闽ICP备14008679号