注意点:
1、Spring Framework从4.0版本开始支持websocket,示例代码使用的是4.1.3
2、SockJs是一个封装的WebSocket实现,可以支持低版本的IE浏览器。
3、SockJs+Spring-WebSocket时,由于SockJs与Spring WebSocket之间采用JSON通讯,需要引入jackson 2的相关jar包。
4、项目需要使用到Spring MVC。
具体代码实现(小例子):
1、Spring WebSocket配置类
package com.watcher.websocket.spring; 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="*" 允许跨域 registry.addHandler(myHandler(), "/ws").addInterceptors(myHandshake()).setAllowedOrigins("*"); //允许客户端使用SockJS registry.addHandler(myHandler(), "/sockjs/ws").addInterceptors(myHandshake()).withSockJS(); } @Bean public MyHandler myHandler(){ return new MyHandler(); } @Bean public MyHandshakeInterceptor myHandshake(){ return new MyHandshakeInterceptor(); } }
2、Handler类实现(用于处理具体的消息)
package com.watcher.websocket.spring; 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; //extending either TextWebSocketHandler orBinaryWebSocketHandler 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; } }
3、握手拦截器实现(拦截器...)
package com.watcher.websocket.spring; 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; /** * * 类描述:握手拦截器 * com.watcher.websocket.spring MyHandshakeInterceptor * Created by 78098 on 2016年11月15日. * version 1.0 */ 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); } }
4、页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="./plugin/sockjs/sockjs-1.1.1.js"></script> <script type="text/javascript"> var url = "192.168.120.37:8080/springMybatis"; 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>
相关推荐
Spring websocket sockjs详细demo
Spring+WebSocket+SockJS简单DEMO 工程环境:tomcat8+jdk1.7+maven+eclipse
简单demo,myeclipse+spring+websocket+sockjs(非maven项目),解压部署就能用,jdk1.7,tomcat7.0或者以上
WebSocket 协议提供了通过一个套接字实现全双工通信的功能。...开启并使用SockJS后,它会优先选用Websocket协议作为传输协议,如果浏览器不支持Websocket协议,则会在其他方案中,选择一个较好的协议进行通讯。........
Spring-ws基于SpringMVC实现的支持SockJS的WebSocket工程实例说明本项目为maven项目,使用SpringMVC实现,用于展示如果使用 SockJS。项目启动后直接打开对应的端口在首页就可以看到展示的功能。后端在"/echo"上添加...
springboot开发websocket使用到的js文件包括sockjs.min.js 、stomp.js
演示 Spring Framework 4.0 中的 Spring WebSocket 和 SockJS 支持,目前正在开发中。 重要提示:此分支包含使用 JSR-356 Endpoint和@ServerEndpoint 。 master分支包含使用 Spring 的WebSocketHandler示例,包括 ...
Spring WebSocket Angular6 该项目的目的是提供angular6客户端和spring应用程序之间的通知/消息服务的完整示例。 有许多使用SockJS的客户端示例,但是直接使用javascript而...使用java -jar spring-websocket-1.0-SNAP
宇视监控系统mac系统客户端,适用宇视的nvr
它基于Spring WebSocket和SockJS支持构建,当前正在为Spring Framework 4.0开发,并且可以在下面进一步列出的服务器之一上运行。 在运行测试之前,请设置以下环境变量: export SOCKJS_URL=...
spring websocket 用到的sockjs
概述演示 Spring 框架中的 Spring WebSocket 和 SockJS 支持。 有关更长的概述,请参阅。 重要提示: master分支包含使用 Spring 的WebSocketHandler示例,包括 SockJS 回退选项。 endpoint分支包含使用 JSR-356 ...
spring-websocket-js 一个带有spring和javascript的基本websocket应用程序 运行命令 要启动该应用程序,请从终端在项目的根目录中运行follwoing maven命令: mvn spring-boot:run 注意:您的默认Java版本应与pom....
可以实现服务端-客户端高效低功耗完美双向通信 可选择使用websocket或者sockJS连接服务器,观察方便,完美观察连接全过程。
概述演示 Spring Framework 4.0 中的 Spring WebSocket 和 SockJS 支持。 重要提示: master分支包含使用 Spring 的WebSocketHandler示例,包括 SockJS 回退选项。 endpoint分支包含使用 JSR-356 Endpoint和@...
克隆应用程序git clone https://github.com/callicoder/spring-boot-websocket-chat-demo.git 2.使用maven生成并运行应用cd spring-boot-websocket-chat-demomvn packagejava -jar target/websocket-demo-0.0.1-...
本篇文章主要介绍了WebSocket spring示例demo(已使用sockJs库),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring+Websocket+sockjs需要用到的sockjs最新版。 js在文件夹“dist”下面
sockjs文件,配合stomp和spring websocket stomp协议使用,