• sockjs-client和stompjs连接websocket服务被拒绝导致vue项目崩溃问题


    1、前端连接服务器代码demo:

    // 引入stomp.js库
    import SockJS from 'sockjs-client';
    import Stomp from 'stompjs';
    
    // WebSocket服务器地址
    const ws = new SockJS('http://localhost:8080/my-endpoint');
    
    // 初始化STOMP客户端
    const stompClient = Stomp.over(ws);
    
    // 连接STOMP服务器
    stompClient.connect({}, frame => {
        console.log('Connected: ' + frame);
    
        // 订阅一个路径
        stompClient.subscribe('/topic/greetings', message => {
            console.log(JSON.parse(message.body).content);
        });
    }, error => {
        console.error('STOMP error:', error);
    });
    
    // 发送消息到服务器
    stompClient.send("/app/hello", {}, JSON.stringify({ 'name': 'John Doe' }));
    
    // 断开连接
    stompClient.disconnect();
    

    2、崩溃主要原因

    • 未捕获的异常:在JavaScript(以及Vue.js这样的框架)中,如果发生一个异常且没有被任何try…catch语句捕获,那么异常会冒泡至全局作用域,导致整个应用崩溃。Vue.js自身不会捕获这些异常,因为它们是在应用代码中产生的。
    • 错误冒泡:在JavaScript中,错误冒泡到全局作用域通常指的是当一个错误在代码中被抛出(throw),并且没有被任何内部的try…catch语句捕获时,这个错误会沿着调用栈向上传播,最终到达全局作用域。如果全局作用域也没有错误处理机制,那么这个错误通常会导致整个应用崩溃,因为JavaScript引擎不知道如何继续执行后续的代码。具体来说,当函数内部发生错误时,如果这个函数没有包含try…catch块来捕获这个错误,那么错误会被传递给调用该函数的代码。如果这个调用代码也没有捕获错误,那么错误会继续向上冒泡,直到到达最顶层的全局作用域。冒泡到全局作用域的错误通常会导致浏览器控制台显示错误信息,并且可能会中断正在执行的JavaScript代码,导致应用界面停止响应或变得不可用。在单页面应用(SPA)如Vue应用中,这种全局错误可能会导致整个应用的UI停止更新或行为异常。

    3、解决方式:因为当前版本的socketjs内部没有捕捉连接失败抛出的异常,所以最好的解决方式就是对websocket服务器进行健康检查,如果请求服务器有响应说明没挂进行连接,否则就舍弃websocket相关应用,舍车保帅,保证nodejs服务的正常运行。

    	@GetMapping("/health")
        public Health health() {
            return 'ok';
        }
    
  • 相关阅读:
    SpringBoot--HttpServletRequest中的方法--使用/详解
    搭建基于Apache的Jena图数据平台
    【开源微服务项目】论如何在微服务中优雅的实现Redis序列化配置
    基于Matlab-gui信号系统设计
    [Docker]八.Docker 容器跨主机通讯
    前端核武器:开源FrontendBlocks所见即所得编辑器让所有人都能做前端布局
    ubuntu下Anaconda环境安装GPU的pytorch(docker镜像)
    阿里云Linux系统MySQL8忘记密码修改密码
    不知道如何进行图片文字翻译?看完这篇你就知道了
    Qt调起Mac“系统设置”面板
  • 原文地址:https://blog.csdn.net/weixin_48811255/article/details/139615493