Springboot整合websocket

引入javax.websocket.api得到运用websocket,为什么要Springboot要整合websocket?在websocket运行于外部Tomcat时,当一对servlet访问,就产生了一个websocket实例,两两相对通讯,一个客户端一个服务端。经过这个发现,导致后面的代码要改,比如容器不能在这里面要么是静态!因为这是产生多例

 

在运行于外部Tomcat,一个访问一个实例服务,运行在Springboot内嵌Tomcat则不是这样了,访问不上,因为注册不进去。指的不上注入到Spring容器中,而是websocket服务注册不进去通过以前的方法。实例对象注解能注入,到websocket服务注册不到Tomcat容器中。就访问不上了,所以有整合一说,使用Springboot按约定进行整合开发。因为有依赖所以要整合,websocket依赖于web容器,而Springboot自己嵌容器,所以要进去就只有整合。如果无依赖Spring则注入与否都一样

 

jsp代码和之前的一样,通过url长时间连接服务器,进行通讯。页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script>
        var websocket;
        if ('WebSocket' in window) {
            websocket = new WebSocket("ws://localhost:8080/websocket/zhangsan");
        } else {
            console.log("不支持websocket");
        }
        window.onbeforeunload = function (ev) {
            console.log("准备关闭连接")
            websocket.close();
        }
        websocket.onmessage = function (ev) {
            console.log("收到服务器消息: " + ev.data)
        }
        websocket.onerror = function (ev) {
            console.log("出现异常")
        }
        websocket.onopen = function (ev) {
            console.log("连接建立成功")
        }
    </script>
</head>
<body>
<input type="text" name="">
<button id="clickEndpoint">发送消息</button>
</body>

<script>
    var v = document.getElementById("clickEndpoint");
    v.onclick = function (msg) {
        websocket.send("xixihaha");
    }
</script>

</html>

判断是否支持websocket,加载script时通过ws://url连接服务器,给window注册时间,点击按钮websocket对象.send发出信息

 

 

服务端:

@Configuration表示自己是个配置类,@EnableWebSocket将websocket的bean都管理进来。实现与websocketConfigurer接口。将重写方法registerWebSocketHandler是:注册websocket处理者。前面是处理者类,后面是websocket的服务名。

 

给注册处理类添加拦截器,这样将在进行websocket经过拦截器,当然拦截器可要可不要。如果有需求到可要要,我们这里为了拿到一点信息使用了拦截器

 

拦截器:

实现拦截器接口,将重写2方法,拦截前与拦截后方法,。从请求头获得url,得到/zhangsan,截取掉/,拿到参数的map,将截取的名字放进去,后面可要拿到这个map在websocket处理类中拦截器返回true表示继续往下调用,否则将原地停止

 

实现处理类,里面的方法与websocket类似,建立连接,存储在容器中。接收到消息调用Message方法,并得到websocketsession对象发送消息。这里是自己给自己发,也不打算去找谁去发送

 

发送异常以连接管理。都在重写方法内

 

通讯成功

 

使用websocket连接是建立了,但用户一刷新又是新连接这样也不合适,于是给用户打标识。关于如何调用到注解下的方法,工程收到别人的管理,他得到类的构造扫描类下的所有注解,符合就调用。如果他想在类的前与后做操作就产生代理。这两点做法是不一样的。一个是构造得到类的注解调用这些方法,一个是给类代理在类调用前后触发inkove不知不觉进行前与后操作

 

关于拦截器与过滤器,过滤器是符合过滤要求进入过滤器,可以选择往下调用,当掉完在回调到方法调用处。而拦截器是给类产生代理。在类的前后前后调用操作,调不调用你要掉的方法是随便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Spring Boot整合WebSocket,你需要进行以下步骤: 1. 首先,在pom.xml文件中添加WebSocket的相关依赖。可以使用以下两个依赖之一: - 从中提到的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` - 从中提到的依赖: ```xml <!--webSocket--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类,这个类负责配置WebSocket的相关信息。你可以按照以下方式创建一个配置类[3]: ```java package com.loit.park.common.websocket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } ``` 3. 至此,你已经完成了WebSocket整合配置。现在,你可以在你的应用中创建WebSocket的控制器并定义你的WebSocket端点。你可以根据你的需求来实现WebSocket端点的业务逻辑。 这就是Spring Boot整合WebSocket的基本步骤。通过这种方式,你可以在Spring Boot应用中轻松地使用WebSocket进行实时通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot整合websocket](https://blog.csdn.net/weixin_45390688/article/details/120448778)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springboot整合websocket(详解、教程、代码)](https://blog.csdn.net/hjq_ku/article/details/127503180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值