新闻中心

JS如何调用SpringWebSocket服务_JS调用SpringWebSocket服务的完整教程

2025-11-11
浏览次数:
返回列表
前端通过STOMP over WebSocket与Spring后端通信,需引入sockjs-client和stompjs库;首先配置Spring WebSocket支持STOMP,定义端点如/ws、消息代理前缀/topic及应用前缀/app;前端使用SockJS连接/ws,通过Stomp.over建立STOMP客户端,连接成功后订阅/topic/greetings主题;调用stompClient.send("/app/hello", {}, JSON.stringify(data))发送消息至后端@Controller类的@MessageMapping方法;后端处理后通过@SendTo广播到/topic/greetings,所有订阅者接收并更新页面;页面卸载时应调用disconnect避免资源泄漏。关键点包括跨域配置、路径一致性、消息格式匹配。

js如何调用springwebsocket服务_js调用springwebsocket服务的完整教程

前端通过J*aScript调用Spring WebSocket服务,主要依赖浏览器原生的 WebSocket API 与后端建立双向通信。Spring 提供了基于 STOMP(Simple Text Oriented Messaging Protocol)的 WebSocket 支持,因此前端通常使用 STOMP over WebSocket 的方式来连接和交互。

1. 确保后端已配置 Spring WebSocket + STOMP

在开始 JS 调用前,确认你的 Spring Boot 项目已正确配置 WebSocket 服务。以下是最基本的配置示例:

添加依赖(M*en):


  org.springframework.boot
  spring-boot-starter-websocket

启用 WebSocket 配置类:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").setAllowedOriginPatterns("*").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/app");
        registry.enableSimpleBroker("/topic", "/queue");
    }
}

创建消息处理 Controller:

@Controller
public class WsController {

    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public GreetingMessage greeting(HelloMessage message) throws Exception {
        Thread.sleep(1000);
        return new GreetingMessage("Hello, " + message.getName() + "!");
    }
}

上面配置说明:

  • /ws 是 WebSocket 连接端点
  • /app/hello 是客户端发送消息的目标路径
  • /topic/greetings 是广播消息的订阅主题

2. 前端引入 STOMP.js 并连接 WebSocket

由于原生 WebSocket 不支持 STOMP 协议,需引入 stomp.js@stomp/stompjs 库。

安装 stompjs(推荐使用 npm):

npm install @stomp/stompjs sockjs-client

或直接使用 CDN 引入:


J*aScript 连接并使用 STOMP:

const socket = new SockJS('/ws');
const stompClient = Stomp.over(socket);

stompClient.connect({}, function(frame) {
    console.log('Connected: ' + frame);

    // 订阅 /topic/greetings 主题
    stompClient.subscribe('/topic/greetings', function(greeting) {
        const message = JSON.parse(greeting.body);
        console.log('Received: ' + message.content);
        // 更新页面 DOM
        document.getElementById("output").innerHTML += "<br>" + message.content;
    });

}, function(error) {
    console.error('STOMP connection error:', error);
});

3. 发送消息到 Spring 后端

连接成功后,可通过 stompClient.send() 向后端发送消息。

示例:发送消息触发 /app/hello

function sendMessage() {
    const msg = { name: "张三" };
    stompClient.send("/app/hello", {}, JSON.stringify(msg));
}

HTML 示例按钮:

Tanka Tanka

具备AI长期记忆的下一代团队协作沟通工具

Tanka 146 查看详情 Tanka


点击按钮后,前端发送消息 → Spring 处理 → 广播到 /topic/greetings → 所有订阅者收到响应。

4. 处理断开连接与错误

建议在页面卸载时关闭连接,避免资源浪费。

window.onbeforeunload = function() {
    if (stompClient && stompClient.connected) {
        stompClient.disconnect();
    }
};

也可以监听网络中断、重连等状态,增强健壮性。

基本上就这些。只要后端配置好 STOMP 端点,前端用 stomp.js 连接、订阅、发消息,就能实现实时双向通信。不复杂但容易忽略细节,比如跨域、路径前缀、消息格式等,务必核对一致。

以上就是JS如何调用SpringWebSocket服务_JS调用SpringWebSocket服务的完整教程的详细内容,更多请关注其它相关文章!


# 滑块  # 英文字母网站推广  # 信宜三华李网站推广策划  # 忻州网站优化费用  # seo网站优化培训怎么样做  # 建材营销推广报价  # SEO单于  # 绍兴网站建设代码大全  # 陕西网站推广哪个好做  # 青岛低价网站建设  # 青海关键词排名获客软件  # 中文网  # 相关文章  # 推荐使用  # 就能  # 加载  # js开发spring教程  # 客户端  # 如何使用  # 发送消息  # 后端  # web  # app  # 浏览器  # npm  # json  # 前端  # js  # html  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: C++ explicit关键字防止隐式转换_C++构造函数安全规范  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议  qq游戏大厅官方下载_qq游戏免费下载安装入口  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  J*aScript DOM操作:高效清空列表元素的策略与实践  PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  微信群消息显示延迟如何解决 微信群消息刷新优化方法  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  解决Flask中Quill编辑器内容提交失败及TypeError的指南  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  单射、满射与双射的关系 一文理清所有逻辑  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  PDF文件体积过大处理_PDF压缩技巧详解  C++如何比较两个字符串_C++ string compare函数与操作符对比  学习通网页版官方登录 超星学习通电脑端入口指南  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  微信聊天记录怎么加密_微信聊天记录加密方法  Lar*el Form Request中唯一性验证在更新操作中的正确实现  Lar*el 8 多关键词数据库搜索优化实践  c++中为什么推荐使用using替代typedef_c++现代化类型别名  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  服务端验证_j*ascript输入检查  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  ACG动漫视频网入口 ACG动漫*免费正版观看地址  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  12306选座怎么选到临时改签座_12306改签选座策略与步骤  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  晋江读书网页版在线登录 晋江读书电脑版官网  mc.js免安装版 mc.js一键畅玩入口  抖音网页版平台入口 抖音网页版官网在线访问教程  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  mysql如何设置表访问权限_mysql表访问权限配置  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  J*a应用程序首次运行自动创建文件与目录的最佳实践  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  Win11怎么开启高性能模式_Windows 11电源计划优化设置  网站内容防复制粘贴的实现策略与局限性 

搜索