`

spring boot整合websocket模块

 
阅读更多
1.什么是Websocket
首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。
简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。
1) HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。
在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。
但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

2.开启支持websocket(@EnableWebSocketMessageBroker)
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;

/**
(1)@EnableWebSocketMessageBroker注解用于开启使用STOMP协议来传输基于代理(MessageBroker)的消息,这时候控制器(controller)
         开始支持@MessageMapping,就像是使用@requestMapping一样。

(2)注册一个Stomp的节点(endpoint),并指定使用SockJS协议。

(3)配置消息代理(MessageBroker)。

**/
@Configuration
@EnableWebSocketMessageBroker//1
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/endpointWisely").withSockJS(); //2
    }
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");//3
    }
}


3.类似controller请求的action
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

/**
 * 
 *(1)@MessageMapping和@RequestMapping功能类似,用于设置URL映射地址,浏览器向服务器发起请求,需要通过该地址。
 *
 *(2)如果服务器接受到了消息,就会对订阅了@SendTo括号中的地址传送消息。
 * @author lanwx
 * @time 2017年11月22日上午10:11:37
 */
@Controller
public class WsController {
	
	@MessageMapping("/welcome") // 1     接受请求的地址
	@SendTo("/topic/getResponse") // 2   订阅的地址
	public WiselyResponse say(WiselyMessage message) throws Exception {
		return new WiselyResponse("Welcome, " + message.getName() + "!");
	}
}


4.页面
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>Spring Boot+WebSocket+广播式</title>

</head>
<body onload="disconnect()">
<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 src="https://cdn.bootcss.com/angular.js/1.5.6/angular.min.js"></script>
<script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.min.js"></script>
<script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script>
<script src="/common/jquery/3.2.1/jquery-3.2.1.js"></script>
<script type="text/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() {
    	// 注册到一个Stomp的节点
        var socket = new SockJS('/endpointWisely'); //1
        stompClient = Stomp.over(socket);//2
        stompClient.connect({}, function(frame) {//3
            setConnected(true);
            console.log('开始进行连接Connected: ' + frame);
            stompClient.subscribe('/topic/getResponse', function(respnose){ //4
                showResponse(JSON.parse(respnose.body).responseMessage);
            });
        });
    }
    
    
    function disconnect() {
        if (stompClient != null) {
            stompClient.disconnect();
        }
        setConnected(false);
        console.log("Disconnected");
    }
	// 发送到 @MessageMapping("/welcome") 这个地址 
    function sendName() {
        var name = $('#name').val();
        stompClient.send("/welcome", {}, JSON.stringify({ 'name': name }));//5
    }

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



分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring Boot项目整合websocket.zip

    在本文中,我们将深入探讨如何在Spring Boot项目中整合WebSocket技术,以便实现高效的实时通信功能。Spring Boot以其简洁的配置和强大的功能深受开发者喜爱,而WebSocket作为一种双向通信协议,能够提供持续的连接,...

    Spring Boot 整合 Netty + WebSocket 实时消息推送

    1. **Spring Boot集成WebSocket**:Spring Boot提供了Spring WebSocket模块,可以方便地集成WebSocket功能。通过配置`WebSocketConfig`类,我们可以定义WebSocket的端点(如`/websocket`),并在该端点上处理连接...

    spring boot+vue+websocket带token身份认证推送消息实现

    Spring Boot通过引入`spring-boot-starter-websocket`模块可以轻松集成WebSocket。在`pom.xml`文件中添加以下依赖,以支持WebSocket的依赖管理: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-...

    Springboot多连接池+websocket

    在Spring Boot中,可以通过`spring-websocket`模块实现WebSocket功能。使用`@ServerEndpoint`注解定义WebSocket的端点,`@MessageMapping`用于处理消息。同时,还需要配置WebSocket的消息处理器,例如使用`...

    spring boot版web socket模板

    Spring Boot 的 WebSocket 模块可以通过 spring-boot-starter-websocket 来快速集成,这个 starter 包含了所有需要的依赖和自动配置,让使用者能够轻松地集成 WebSocket 功能。 在 Spring Boot 中,我们可以使用 @...

    38. Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】

    要实现Spring Boot分布式Session与Redis的整合,我们需要以下几个步骤: 1. **添加依赖**: 首先在`pom.xml`或`build.gradle`文件中添加Spring Session和Redis的依赖。对于Maven,可以添加如下依赖: ```xml ...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 使用 Websocket - springboot-webflux - Spring Boot 集成 WebFlux 开发反应式 Web 应用 - springboot-dubbo - Spring Boot 集成 Dubbo 的三种方式 - springboot-search - Spring Boot 集成...

    SpringBoot整合ActiveMQ+websocket.docx

    以上就是Spring Boot整合ActiveMQ和WebSocket的基本概念和关键步骤。通过这样的整合,我们可以构建一个高效的消息传递系统,支持实时的前端与后端通信。如果需要实现WebSocket部分,可以参考Spring官方文档和相关...

    spring-boot实战PDF 完整版和随书源码.7z

    1. 自动配置:Spring Boot根据类路径中的依赖自动配置Spring容器,例如,如果你引入了`spring-boot-starter-web`模块,那么它将自动配置Tomcat服务器和Spring MVC。 2. 嵌入式服务器:Spring Boot支持内嵌Tomcat、...

    10-Springboot整合WebSocket

    总结,Spring Boot整合WebSocket提供了实时通信的能力,使得前后端可以高效地进行数据交换。前端使用JavaScript库与后端WebSocket服务进行连接并订阅消息,后端则通过`@MessageMapping`和`@SendTo`注解处理连接请求...

    本项目基于Spring平台,整合websocket协议,实现一个简易web聊天室的功能

    在这个项目中,Spring不仅作为后端服务的基础框架,还通过其提供的WebSocket模块,帮助开发者轻松集成WebSocket功能。 首先,项目的实现依赖于Spring Boot,这是一个Spring框架的微服务启动器,它简化了Spring应用...

    idea maven聚合项目 spring-boot 整合 dubbo

    1. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建以及开发过程,它集成了大量的常用库,如数据访问、安全、WebSocket等,允许开发者快速构建可独立运行的Java应用。 2. **Dubbo**:Dubbo是基于Java的RPC...

    Spring Boot WebChat 网页聊天室

    Spring Boot WebChat 网页聊天室是一款基于Spring Boot框架构建的应用,整合了Spring Security、Spring Data JPA、Thymeleaf以及Spring WebSocket等技术,为用户提供了一个实时的在线聊天平台。下面将详细介绍这些...

    Spring-WebSocket-demo01.zip

    对于Spring WebSocket应用,可以使用Spring Boot的Actuator端点检查WebSocket统计信息。 综上所述,`Spring-WebSocket-demo01.zip`提供的入门示例涵盖了从WebSocket配置、消息处理到客户端连接的基本操作,是学习...

    2019精通Spring Boot 42讲

    - Spring Boot Test模块,提供单元测试和集成测试的支持。 - 使用Mockito、WireMock等工具进行模拟测试。 8. **配置管理** - 使用application.properties或yaml文件进行配置。 - 外部化配置,通过环境变量或...

    spring-websocket整合实现客户端和服务端聊天 亲测可用

    在本文中,我们将深入探讨如何使用Spring框架的WebSocket模块与SockJS进行整合,实现服务器与客户端之间的高效、低功耗的双向通信。Spring WebSocket提供了一种现代化的方式,使得Web应用程序能够实现实时通信,而...

    基于Spring Boot框架的全面学习项目.zip

    通过本项目,开发者可以深入了解Spring Boot的各种功能和特性,包括配置管理、数据库集成、缓存、日志管理、异常处理、文件上传、WebSocket等。 项目的主要特性和功能 1. Spring Boot快速启动通过简单的示例演示...

    springboot-websocket.rar

    Spring Boot 是一个流行的Java开发框架,它简化了创建独立、生产级别的基于Spring的应用程序的过程。...通过深入理解和应用这些知识点,你可以熟练掌握Spring Boot和WebSocket的整合,从而在开发实时应用时游刃有余。

    spring boot 实战

    《Spring Boot实战》是一本深度剖析Spring Boot框架的电子书,包含了中英文两个...通过阅读这本书,读者将能够熟练掌握Spring Boot的各个核心模块,并能灵活运用到实际项目中,提高开发效率,打造高质量的Java应用。

    Javaee开发 spring boot实战

    5. 整合WebSocket:使用WebSocket实现实时通信,提升用户体验。 6. 异步处理:通过@Async注解实现方法的异步执行,提高系统性能。 7. 微服务集成:与Spring Cloud结合,构建分布式系统,实现服务发现、负载均衡等...

Global site tag (gtag.js) - Google Analytics