`
sunbin
  • 浏览: 349640 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring boot + websocket进行通信

 
阅读更多

转http://zk-chs.iteye.com/blog/2285329

这次给大家说一下自己对websocket + spring boot结合使用的一些经验

 

首先websocket是一个持久化的协议,实现了浏览器与服务器的全双工通信。不再像http那样,只有在浏览器发出request之后才有response,websocket能实现服务器主动向浏览器发出消息。

 

下面我们用spring boot来实现一下:

在spring boot的文档中,介绍了我们需要配置的文件

Java代码  收藏代码
  1. // pom.xml  
  2. <dependency>  
  3.             <groupId>org.springframework.boot</groupId>  
  4.             <artifactId>spring-boot-starter-websocket</artifactId>  
  5. </dependency>  
 
之后我们需要添加一个单例bean,名为ServerEndpointExporter
Java代码  收藏代码
  1. @Configuration  
  2. public class WebSocketConfig {  
  3.     @Bean  
  4.     public ServerEndpointExporter serverEndpointExporter (){  
  5.         return new ServerEndpointExporter();  
  6.     }  
  7. }  
 
接下来便能使用websocket了,下面是一个简单的例子:
Java代码  收藏代码
  1. @ServerEndpoint("/websocket")  
  2. @Component  
  3. public class MyWebSocket {  
  4.   
  5.     private static int onlineCount = 0;  
  6.   
  7.     private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<>();  
  8.   
  9.     private Session session;  
  10.   
  11.     @OnOpen  
  12.     public void onOpen (Session session){  
  13.         this.session = session;  
  14.         webSocketSet.add(this);  
  15.         addOnlineCount();  
  16.         System.out.println("有新链接加入!当前在线人数为" + getOnlineCount());  
  17.     }  
  18.   
  19.     @OnClose  
  20.     public void onClose (){  
  21.         webSocketSet.remove(this);  
  22.         subOnlineCount();  
  23.         System.out.println("有一链接关闭!当前在线人数为" + getOnlineCount());  
  24.     }  
  25.   
  26.     @OnMessage  
  27.     public void onMessage (String message, Session session) throws IOException {  
  28.         System.out.println("来自客户端的消息:" + message);  
  29.         // 群发消息  
  30.         for ( MyWebSocket item : webSocketSet ){  
  31.                 item.sendMessage(message);  
  32.         }  
  33.     }  
  34.   
  35.     public void sendMessage (String message) throws IOException {  
  36.         this.session.getBasicRemote().sendText(message);  
  37.     }  
  38.   
  39.     public static synchronized  int getOnlineCount (){  
  40.         return MyWebSocket.onlineCount;  
  41.     }  
  42.   
  43.     public static synchronized void addOnlineCount (){  
  44.         MyWebSocket.onlineCount++;  
  45.     }  
  46.   
  47.     public static synchronized void subOnlineCount (){  
  48.         MyWebSocket.onlineCount--;  
  49.     }  
  50.   
  51. }  
 
代码很简单,相信大家都能看懂,接下来贴一下html代码:
Java代码  收藏代码
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4.     <base href="localhost://localhost:8080/">  
  5.     <title>My WebSocket</title>  
  6. </head>  
  7.   
  8. <body>  
  9. Welcome<br/>  
  10. <input id="text" type="text"/>  
  11. <button onclick="send()">Send</button>  
  12. <button onclick="closeWebSocket()">Close</button>  
  13. <div id="message">  
  14. </div>  
  15. </body>  
  16.   
  17. <script type="text/javascript">  
  18.     var websocket = null;  
  19.   
  20.     //判断当前浏览器是否支持WebSocket  
  21.     if ('WebSocket' in window) {  
  22.         websocket = new WebSocket("ws://localhost:8080/websocket");  
  23.     }  
  24.     else {  
  25.         alert('Not support websocket')  
  26.     }  
  27.   
  28.     //连接发生错误的回调方法  
  29.     websocket.onerror = function () {  
  30.         setMessageInnerHTML("error");  
  31.     };  
  32.   
  33.     //连接成功建立的回调方法  
  34.     websocket.onopen = function (event) {  
  35.         setMessageInnerHTML("open");  
  36.     }  
  37.   
  38.     //接收到消息的回调方法  
  39.     websocket.onmessage = function (event) {  
  40.         setMessageInnerHTML(event.data);  
  41.     }  
  42.   
  43.     //连接关闭的回调方法  
  44.     websocket.onclose = function () {  
  45.         setMessageInnerHTML("close");  
  46.     }  
  47.   
  48.     //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。  
  49.     window.onbeforeunload = function () {  
  50.         websocket.close();  
  51.     }  
  52.   
  53.     //将消息显示在网页上  
  54.     function setMessageInnerHTML(innerHTML) {  
  55.         document.getElementById('message').innerHTML += innerHTML + '<br/>';  
  56.     }  
  57.   
  58.     //关闭连接  
  59.     function closeWebSocket() {  
  60.         websocket.close();  
  61.     }  
  62.   
  63.     //发送消息  
  64.     function send() {  
  65.         var message = document.getElementById('text').value;  
  66.         websocket.send(message);  
  67.     }  
  68. </script>  
  69. </html>  

 

 
接下来便能直接启动websocket进行访问了,具体的扩展可以根据你的业务需求进行增加。
其实websocket就是基于http协议的升级,在http的headers中有一个header名为Upgrade,用来对http协议进行升级,从而换用其他的协议,在本例中,为Upgrade:websocket
分享到:
评论

相关推荐

    spring boot+websocket

    在本文中,我们将深入探讨如何在Spring Boot框架中集成WebSocket技术,以便实现实时通信功能。结合jQuery在前端的应用,可以构建出一个高效、实时的Web应用。首先,让我们了解Spring Boot和WebSocket的基本概念。 ...

    java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统.zip

    一个基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统。适用于直播间聊天、游戏内聊天、客服聊天等临时性群聊场景。 Java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统。一...

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

    为了确保安全性,WebSocket通信需要进行身份认证。通常是在WebSocket连接建立之前,使用HTTP的`Authorization`头部进行身份认证。认证成功后,服务器端生成一个令牌(token),例如JWT(JSON Web Token),返回给...

    spring boot+websocket前后端简单demo

    总结起来,这个简单的Spring Boot+WebSocket demo展示了如何利用Spring Boot框架创建WebSocket服务,以及如何使用JavaScript客户端进行连接和通信。通过这个示例,开发者可以进一步了解WebSocket在实时应用中的作用...

    如何使用Spring Boot 3.X + WebSocket来实现推送消息功能

    如何使用Postman来发送数据到后端Spring Boot应用程序,并使用WebSocket建立实时通信通道,以便后端应用程序可以向Postman推送消息。 学会这个方法,就能缩短你的项目开发周期,以及提高你的开发效率。如果提出您的...

    Spring Boot + WebSocket + 广播式

    STOMP是一种简单易用的二进制协议,常用于WebSocket通信。 接着,我们需要实现`WebSocketMessageBrokerConfigurer`接口,配置WebSocket端点和STOMP消息代理。在`configureMessageBroker()`方法中,我们可以设置消息...

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

    3. **Netty作为WebSocket后台服务器**:虽然Spring Boot内置了Tomcat或Undertow这样的嵌入式服务器,但它们可能并不适合高并发的实时通信场景。这时,我们可以使用Netty作为WebSocket的后台服务器,利用其高效的非...

    spring boot + netty websocket

    在测试方面,由于WebSocket是基于TCP的,所以普通的HTTP测试工具可能无法很好地模拟WebSocket通信。这里我们可以使用一些专门的WebSocket测试工具,如`ws`命令行工具,或者在代码中使用`WebSocketClient`进行测试。 ...

    基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql

    基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql 项目经过严格测试,确保可以运行! 下载代码后,先配置好yml文件:数据库和微信号appid、secret(other包下面有数据库)...

    使用Spring Boot + WebSocket 构建的一个简易聊天室

    在本文中,我们将深入探讨如何使用Spring Boot和WebSocket技术构建一个简易的聊天室。Spring Boot是Java领域中广泛使用的框架,它简化了Spring应用程序的初始设置和配置。WebSocket则是一种在客户端和服务器之间建立...

    springboot+websocket进度条实战

    Spring Boot简化了Java Web开发,提供了快速构建独立应用程序的方式,而WebSocket则是一种在客户端和服务器之间建立长连接的协议,可以实现双向通信,非常适合于实时数据更新的需求,如进度条显示。 首先,我们需要...

    springboot+rabbitMQ+websocket

    接下来,我们将深入探讨如何利用Spring Boot、RabbitMQ和WebSocket来实现一个简单的消息推送聊天应用。 首先,让我们了解Spring Boot如何集成RabbitMQ。在Spring Boot项目中引入`spring-boot-starter-amqp`依赖,它...

    springboot+netty+websocket+redis

    它提供了一套强大的事件处理机制,使得开发者可以轻松地处理TCP、UDP和HTTP协议,包括WebSocket通信。Netty底层基于NIO(非阻塞I/O)模型,提高了网络通信的性能。 ### 3. WebSocket - 实时消息传输 WebSocket是一...

    spring+websocketdemo

    这通常需要自定义Servlet和Filter来桥接Spring和Netty的WebSocket通信。 6. **测试与调试**:可以使用WebSocket测试工具(如Chrome的WebSocket面板,或是Postman的WebSocket扩展)来模拟客户端行为,测试WebSocket...

    spring boot整合WebSocket实现多人聊天室的实例

    WebSocket是Web应用中一种实时通信(Real-Time Communication, RTC)技术,它允许服务器与客户端之间进行双向通信,而不仅仅是传统的HTTP请求-响应模式。Spring Boot是基于Java的微服务框架,它简化了创建独立的、...

    Spring Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送.zip

    Spring Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送 ...

    SpringBoot整合ActiveMQ+websocket.docx

    在Spring Boot应用中整合ActiveMQ和WebSocket,可以创建一个实时通信系统,使后端服务能够高效地推送消息到前端客户端。以下将详细解释这个过程的关键知识点: 1. **ActiveMQ**:Apache ActiveMQ是一个开源的消息...

    springboot + jwt + websocket + 拦截

    WebSocket则是一种在客户端和服务器之间建立长连接的协议,它允许双方进行双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。WebSocket协议解决了HTTP协议的局限性,提高了实时性,广泛应用...

    Springboot多连接池+websocket

    总的来说,这个项目是一个利用Spring Boot框架,结合多连接池技术来优化数据库访问,同时采用WebSocket实现实时通信的示例。开发者可以通过CSDN上的博文获取更详细的技术讲解,或者直接联系提供的QQ号获取帮助。这样...

    springboot+websocket+redis实现聊天室

    Spring Boot提供了WebSocket的支持,可以通过`@ServerEndpoint`注解定义WebSocket端点,并使用`Session`对象进行消息传递。 3. **Redis**: Redis是一款高性能的键值存储数据库,常用于缓存和消息队列。在聊天室...

Global site tag (gtag.js) - Google Analytics