随笔 - 832  文章 - 2  评论 - 31  阅读 - 167万

websocket广播式实例

1、引入相关依赖

复制代码
<parent>
<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
  </parent>
 <dependencies>
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
 </dependencies>
复制代码

2、写配置类

复制代码
package springboot.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/endpointZouHong").withSockJS();
    }
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
    }
}
复制代码

3、实体类

服务端接收类:

复制代码
package springboot.bean;
public class ZouhongServerMessage {
    private String name;
        public String getName() {
        return name;
    }
        public void setName(String name) {
        this.name = name;
    }
}
复制代码

浏览器接收类:

复制代码
package springboot.bean;
public class ZouhongBrowResponse {
   private String responseMessage;
   public ZouhongBrowResponse(String responseMessage) {
       this.responseMessage = responseMessage;
   }
    public String getResponseMessage() {
    return responseMessage;
     }
   public void setResponseMessage(String responseMessage) {
    this.responseMessage = responseMessage;
    }
   
}
复制代码

4、处理器

复制代码
package springboot.controller;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
import springboot.bean.ZouhongBrowResponse;
import springboot.bean.ZouhongServerMessage;

@Controller
public class ZHController {
    @MessageMapping("/welcome")
    @SendTo("/topic/getResponse")
    public ZouhongBrowResponse say(ZouhongServerMessage message) throws Exception{
        Thread.sleep(3000);
        return new ZouhongBrowResponse("welcome,"+message.getName()+"!");
   }
}
复制代码

5、前端

复制代码
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>SpringBoot+websocket+广播式</title>
</head>
<body>
<noscript><h2 style="color:#ff0000">貌似你的浏览器不支持websocket</h2></noscript>
<div>
  <div>
    <button id="connect" onclick="connect()">连接</button>
    <button id="disconnect" disabled="disabled" onclick="disconnect()">断开连接</button>
  </div>
  <div id="conversationDiv">
   <label>输入你的名字</label><input type="text" id="name">
   <button id="sendName" onclick="sendName()">发送</button>
   <p id="response"></p>
  </div>
</div>
<script th:src="@{js/jquery.js}"></script>
<script th:src="@{js/stomp.min.js}"></script>
<script th:src="@{js/sockjs.min.js}"></script>
<script th:inline="javascript">
 var stompClient=null;
 function setConnected(connected){
     document.getElementById('connect').disabled=connected;
     document.getElementById('disconnect').disabled=!connected;
     document.getElementById('conversationDiv').style.visibility=connected?'visible':'hidden';
     $("#response").html();
 }

function connect(){
    var socket=new SockJS('/endpointZouHong');
    stompClient=Stomp.over(socket);
    stompClient.connect({},function(frame){
        setConnected(true);
        console.log("Connected:   "+frame);
        stompClient.subscribe('/topic/getResponse',function(response){
            showResponse(JSON.parse(response.body).responseMessage);
        });
    }); 
}

function disconnect(){
    if(stompClient!=null){
        stompClient.disconnect();
    }
    setConnected(false);
    console.log("Disconnected");
}

function sendName(){
    var name=$("#name").val();
    console.log(name);
    stompClient.send('/welcome',{},JSON.stringify({'name':name}));
    
}

function showResponse(message){
    var response=$("#response");
    response.html(message);
    
}
</script>
</body>
</html>
复制代码

6、效果图

 

 

 

 

 

 

 

 

 

 

 

posted on   小破孩楼主  阅读(974)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示