- 浏览: 494725 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
Spring Boot SockJS应用例子
1.SockJS用javascript实现的socket连接,兼容各种浏览器的WebSocket支持库
2.WebSocket是H5的,不支持H5的浏览器没法使用。
3.SockJS它提供类似于websocket的编程模式但是可以适应不同的浏览器(包括不支持websocket的浏览器)。
后端代码:
前端代码:
参考(websocket简单应用):http://wiselyman.iteye.com/blog/2003336
参考(应用例子):http://768992698.iteye.com/blog/2338250
参考(应用例子(TextWebSocketHandler )):http://www.cnblogs.com/likun10579/p/5594828.html
1.SockJS用javascript实现的socket连接,兼容各种浏览器的WebSocket支持库
2.WebSocket是H5的,不支持H5的浏览器没法使用。
3.SockJS它提供类似于websocket的编程模式但是可以适应不同的浏览器(包括不支持websocket的浏览器)。
后端代码:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
package com.cesmart; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.ComponentScan; @EnableAutoConfiguration @ComponentScan(basePackages = "com.cesmart") // 扫描那些包得到bean.@ComponentScan({"com.teradata.notification","com.teradata.dal"}) public class Application { public static void main(String[] args) { ApplicationContext applicationContext = SpringApplication.run(Application.class, args); } }
package com.cesmart.config; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession; public class MyHandler implements WebSocketHandler { // 连接继开处理 @Override public void afterConnectionClosed(WebSocketSession arg0, CloseStatus arg1) throws Exception { // TODO Auto-generated method stub System.out.println("Connection closed..." + arg0.getRemoteAddress().toString()); } // 连接建立处理 @Override public void afterConnectionEstablished(WebSocketSession arg0) throws Exception { // TODO Auto-generated method stub System.out.println("Connection established..." + arg0.getRemoteAddress().toString()); } // 接收、发送信息处理 @Override public void handleMessage(WebSocketSession arg0, WebSocketMessage<?> arg1) throws Exception { // TODO Auto-generated method stub try { System.out.println("Req: " + arg1.getPayload()); // 发送信息 TextMessage returnMessage = new TextMessage(arg1.getPayload() + " received at server"); arg0.sendMessage(returnMessage); } catch (Exception e) { e.printStackTrace(); } } // 错误处理(客户端突然关闭等接收到的错误) @Override public void handleTransportError(WebSocketSession arg0, Throwable arg1) throws Exception { // TODO Auto-generated method stub if (arg0.isOpen()) { arg0.close(); } System.out.println(arg1.toString()); System.out.println("WS connection error,close..."); } @Override public boolean supportsPartialMessages() { // TODO Auto-generated method stub return false; } }
package com.cesmart.config; import java.util.Map; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; /** * 类描述:拦截器 */ public class MyHandshakeInterceptor extends HttpSessionHandshakeInterceptor { @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { // TODO Auto-generated method stub System.out.println("After handshake " + request.getRemoteAddress().toString()); super.afterHandshake(request, response, wsHandler, ex); } @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler, Map<String, Object> map) throws Exception { // TODO Auto-generated method stub System.out.println("Before handshake " + request.getRemoteAddress().toString()); return super.beforeHandshake(request, response, handler, map); } }
package com.cesmart.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration // 配置类 @EnableWebSocket // 声明支持websocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // 注册websocket实现类,指定参数访问地址;allowed-origins="*" 允许跨域 // addHandler是增加处理接口和设定URL // addInterceptors是增加拦截器处理(可以不用) registry.addHandler(myHandler(), "/ws").addInterceptors(myHandshake()).setAllowedOrigins("*"); registry.addHandler(myHandler(), "/sockjs/ws").addInterceptors(myHandshake()).withSockJS(); registry.addHandler(myHandler(), "/ws2").setAllowedOrigins("*"); registry.addHandler(myHandler(), "/sockjs/ws2").setAllowedOrigins("*").withSockJS(); } @Bean public MyHandler myHandler() { return new MyHandler(); } @Bean public MyHandshakeInterceptor myHandshake() { return new MyHandshakeInterceptor(); } }
前端代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="//cdn.bootcss.com/sockjs-client/1.1.1/sockjs.min.js"></script> <script type="text/javascript"> var url = "127.0.0.1:8090/"; var websocket = null; if ('WebSocket' in window) { websocket = new WebSocket("ws://" + url + "/ws");//建立连接 } else { websocket = new SockJS("http://" + url + "/sockjs/ws");//建立连接 } //建立连接处理 websocket.onopen = onOpen; //接收处理 websocket.onmessage = onMessage; //错误处理 websocket.onerror = onError; //断开连接处理 websocket.onclose = onClose; function onOpen(openEvent) { document.getElementById("console").innerHTML = document.getElementById("console").innerHTML+ "OPEN<br/>"; } function onMessage(event) { document.getElementById("console").innerHTML = document.getElementById("console").innerHTML+ event.data+"<br/>"; } function onError() { } function onClose() { document.getElementById("console").innerHTML = document.getElementById("console").innerHTML+ "CLOSE<br/>"; } function doSend() { console.log(websocket.readyState); if (websocket.readyState == SockJS.OPEN) { var msg = document.getElementById("message").value; //发送消息 websocket.send(msg); } else { alert("连接失败!"); } } function disconnect(){ if (websocket != null) { websocket.close(); websocket = null; } } function reconnect(){ if (websocket != null) { websocket.close(); websocket = null; } if ('WebSocket' in window) { websocket = new WebSocket("ws://" + url + "/ws"); } else { websocket = new SockJS("http://" + url + "/sockjs/ws"); } websocket.onopen = onOpen; websocket.onmessage = onMessage; websocket.onerror = onError; websocket.onclose = onClose; } </script> </head> <body> <div> <button id="disconnect" onclick="disconnect()">断开连接</button> <button id="send" onclick="doSend()">发送消息</button> <button id="reconnect" onclick="reconnect()">重新连接</button> </div> <div> <textarea id="message" style="width: 350px">Here is a message!</textarea> </div> <div>日志信息:</div> <p id="console" width="600px"></p> </body> </html>
参考(websocket简单应用):http://wiselyman.iteye.com/blog/2003336
参考(应用例子):http://768992698.iteye.com/blog/2338250
参考(应用例子(TextWebSocketHandler )):http://www.cnblogs.com/likun10579/p/5594828.html
相关推荐
Spring Boot是Java领域中广泛使用的微服务框架,它简化了Spring应用的初始设置和配置。而WebSocket则是一种在客户端和服务器之间建立长连接的协议,提供双向通信,允许实时数据传输。 首先,我们需要在Spring Boot...
在本示例中,我们将探讨如何在Spring Boot框架下实现WebSocket,以便创建实时、双向通信的应用。 首先,我们需要在Spring Boot项目中添加WebSocket的相关依赖。在`pom.xml`文件中,引入`spring-boot-starter-...
Spring Boot是Java领域中广泛使用的框架,它简化了Spring应用程序的初始设置和配置。WebSocket则是一种在客户端和服务器之间建立长连接的协议,允许双向通信,非常适合实时应用如聊天室。 首先,我们需要设置Spring...
在本文中,我们将深入探讨如何使用Spring Boot与Jetty服务器集成来实现WebSocket通信。WebSocket是一种在客户端和服务器之间...通过深入学习和实践这个例子,你可以熟练掌握在Spring Boot应用中集成WebSocket的方法。
Spring Boot 提供了对 WebSocket 的集成支持,使得在 Java 后端实现 WebSocket 功能变得简单。首先,我们需要在 `pom.xml` 文件中引入 Spring Boot 的 WebSocket 依赖: ```xml <groupId>org.springframework....
这里主要涉及了四个关键概念:Spring、Spring Boot、SockJS和STOMP.js。下面将详细介绍这些知识点及其相互关系。 首先,Spring是Java领域的一款强大、灵活的开源应用程序框架,它简化了Java企业级应用的开发过程。...
启动Spring Boot应用,然后在浏览器中打开上面的HTML页面。你应该能看到一条问候消息显示出来,这是服务器发送的回应。 通过这个简单的例子,你已经了解了如何使用Spring WebSocket创建一个基本的聊天功能。然而,...
在Spring Boot应用中实现WebSocket集群并使用STOMP协议进行通信时,传递参数是一个重要的环节,尤其是在多节点集群环境中。WebSocket允许双向通信,而STOMP(Simple Text Oriented Messaging Protocol)则提供了一种...
SpringWebSocket-master.zip是一个包含Spring Boot应用的示例项目,展示了如何使用WebSocket技术和STOMP协议实现前后端通信。WebSocket是一种在单个TCP连接上进行全双工通信的协议,相较于传统的HTTP请求,它允许...
NodeJS (stompjs or other) or Spring Boot (SockJS). Add library as gradle dependency repositories { jcenter() maven { url "https://jitpack.io" } } dependencies { implementation '...
Spring Boot简化了Java Web应用程序的开发过程,而WebSocket则提供了一种双向通信协议,允许服务器和客户端之间进行低延迟的数据交换。 首先,让我们了解Spring Boot的基础。Spring Boot是基于Spring框架的快速开发...
这个例子展示了如何在Spring Boot应用中设置WebSocket服务器,并与客户端进行交互。 要理解这个示例,你需要了解以下几个关键概念: 1. **WebSocket配置**:在Spring Boot应用中,我们需要配置WebSocket的端点。这...
在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及配置过程,让开发者能够更专注于业务代码的编写。而WebSocket是一种在客户端和服务器之间建立长连接的协议,允许双方进行全...
IoC 容器是 Spring 框架的核心组件之一,负责管理应用程序中的对象及其依赖关系。通过 IoC 容器,开发人员可以将对象之间的依赖关系进行解耦,提高代码的可测试性和可维护性。IoC 容器主要功能包括: - **依赖注入*...
Spring Boot,作为一个流行的Java开发框架,通过其丰富的生态,支持WebSocket的集成和使用。本篇文章将深入探讨如何使用Spring Boot来实现WebSocket的发送和接收消息功能。 首先,我们需要在Spring Boot项目中添加...
Spring Boot,作为Spring框架的轻量级启动器,提供了简化Spring应用开发的功能,自然也支持WebSocket的集成。下面将详细介绍Spring Boot如何与WebSocket结合以及在实际应用中的操作步骤。 首先,为了集成WebSocket...
在Spring Boot项目中,可以通过在配置类上添加@EnableWebSocketMessageBroker注解来启用WebSocket消息代理。接着,可以重写WebSocketMessageBrokerConfigurer接口的方法,如configureMessageBroker和...
本教程将围绕"如何在应用程序中快速构建WebSocket服务"这一主题展开,讲解如何利用Spring Boot和WebSocket相关的库实现类似Spring MVC的简洁API。 首先,我们需要引入`websocket-spring-boot-starter`依赖。这个库...
首先,我们需要在项目中引入相关依赖,如`spring-boot-starter-websocket`,这将包含WebSocket的处理逻辑和配置。然后,我们需要配置WebSocket的端点,通常通过实现`WebSocketConfigurer`接口或使用`@ServerEndpoint...
- 在Spring Boot应用中,可能还需要配置`WebSocketMessageBrokerConfigurer`,以支持STOMP协议。 9. **客户端交互**: 客户端需要建立WebSocket连接并与服务器交互。这通常通过JavaScript实现,使用`WebSocket`...