`
huangyongxing310
  • 浏览: 498930 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring Boot SockJS应用例子

阅读更多
Spring Boot SockJS应用例子


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+websocket前后端简单demo

    Spring Boot是Java领域中广泛使用的微服务框架,它简化了Spring应用的初始设置和配置。而WebSocket则是一种在客户端和服务器之间建立长连接的协议,提供双向通信,允许实时数据传输。 首先,我们需要在Spring Boot...

    Websocket简单示例(Spring Boot)

    在本示例中,我们将探讨如何在Spring Boot框架下实现WebSocket,以便创建实时、双向通信的应用。 首先,我们需要在Spring Boot项目中添加WebSocket的相关依赖。在`pom.xml`文件中,引入`spring-boot-starter-...

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

    Spring Boot是Java领域中广泛使用的框架,它简化了Spring应用程序的初始设置和配置。WebSocket则是一种在客户端和服务器之间建立长连接的协议,允许双向通信,非常适合实时应用如聊天室。 首先,我们需要设置Spring...

    Spring-Boot-Jetty-WebSocket-Example:如何使用Spring Boot配置Jetty WebSocket的基本示例

    在本文中,我们将深入探讨如何使用Spring Boot与Jetty服务器集成来实现WebSocket通信。WebSocket是一种在客户端和服务器之间...通过深入学习和实践这个例子,你可以熟练掌握在Spring Boot应用中集成WebSocket的方法。

    Spring Boot 集成 WebSocket 实现服务端推送消息到客户端.docx

    Spring Boot 提供了对 WebSocket 的集成支持,使得在 Java 后端实现 WebSocket 功能变得简单。首先,我们需要在 `pom.xml` 文件中引入 Spring Boot 的 WebSocket 依赖: ```xml &lt;groupId&gt;org.springframework....

    springboot使用websocket的js文件

    这里主要涉及了四个关键概念:Spring、Spring Boot、SockJS和STOMP.js。下面将详细介绍这些知识点及其相互关系。 首先,Spring是Java领域的一款强大、灵活的开源应用程序框架,它简化了Java企业级应用的开发过程。...

    springWebsocket的简单例子

    启动Spring Boot应用,然后在浏览器中打开上面的HTML页面。你应该能看到一条问候消息显示出来,这是服务器发送的回应。 通过这个简单的例子,你已经了解了如何使用Spring WebSocket创建一个基本的聊天功能。然而,...

    springboot websocket集群(stomp协议)连接时候传递参数

    在Spring Boot应用中实现WebSocket集群并使用STOMP协议进行通信时,传递参数是一个重要的环节,尤其是在多节点集群环境中。WebSocket允许双向通信,而STOMP(Simple Text Oriented Messaging Protocol)则提供了一种...

    SpringWebSocket-master.zip

    SpringWebSocket-master.zip是一个包含Spring Boot应用的示例项目,展示了如何使用WebSocket技术和STOMP协议实现前后端通信。WebSocket是一种在单个TCP连接上进行全双工通信的协议,相较于传统的HTTP请求,它允许...

    Android代码-StompProtocolAndroid

    NodeJS (stompjs or other) or Spring Boot (SockJS). Add library as gradle dependency repositories { jcenter() maven { url "https://jitpack.io" } } dependencies { implementation '...

    Springboot+Websocket示例

    Spring Boot简化了Java Web应用程序的开发过程,而WebSocket则提供了一种双向通信协议,允许服务器和客户端之间进行低延迟的数据交换。 首先,让我们了解Spring Boot的基础。Spring Boot是基于Spring框架的快速开发...

    springboot_websocket-demo.rar

    这个例子展示了如何在Spring Boot应用中设置WebSocket服务器,并与客户端进行交互。 要理解这个示例,你需要了解以下几个关键概念: 1. **WebSocket配置**:在Spring Boot应用中,我们需要配置WebSocket的端点。这...

    10-Springboot整合WebSocket

    在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及配置过程,让开发者能够更专注于业务代码的编写。而WebSocket是一种在客户端和服务器之间建立长连接的协议,允许双方进行全...

    spring-framework.pdf

    IoC 容器是 Spring 框架的核心组件之一,负责管理应用程序中的对象及其依赖关系。通过 IoC 容器,开发人员可以将对象之间的依赖关系进行解耦,提高代码的可测试性和可维护性。IoC 容器主要功能包括: - **依赖注入*...

    springboot实现websocket发送和接收消息

    Spring Boot,作为一个流行的Java开发框架,通过其丰富的生态,支持WebSocket的集成和使用。本篇文章将深入探讨如何使用Spring Boot来实现WebSocket的发送和接收消息功能。 首先,我们需要在Spring Boot项目中添加...

    springboot集成websocket的简单例子

    Spring Boot,作为Spring框架的轻量级启动器,提供了简化Spring应用开发的功能,自然也支持WebSocket的集成。下面将详细介绍Spring Boot如何与WebSocket结合以及在实际应用中的操作步骤。 首先,为了集成WebSocket...

    Spring Websocket

    在Spring Boot项目中,可以通过在配置类上添加@EnableWebSocketMessageBroker注解来启用WebSocket消息代理。接着,可以重写WebSocketMessageBrokerConfigurer接口的方法,如configureMessageBroker和...

    在应用程序中你只需要几行代码就可以快速的构建websocket服务,可以像写springMVC一样来使用websocke.zip

    本教程将围绕"如何在应用程序中快速构建WebSocket服务"这一主题展开,讲解如何利用Spring Boot和WebSocket相关的库实现类似Spring MVC的简洁API。 首先,我们需要引入`websocket-spring-boot-starter`依赖。这个库...

    springboot-wbsocket-demo.zip

    首先,我们需要在项目中引入相关依赖,如`spring-boot-starter-websocket`,这将包含WebSocket的处理逻辑和配置。然后,我们需要配置WebSocket的端点,通常通过实现`WebSocketConfigurer`接口或使用`@ServerEndpoint...

    Spring整合websocket整合应用示例(下)

    - 在Spring Boot应用中,可能还需要配置`WebSocketMessageBrokerConfigurer`,以支持STOMP协议。 9. **客户端交互**: 客户端需要建立WebSocket连接并与服务器交互。这通常通过JavaScript实现,使用`WebSocket`...

Global site tag (gtag.js) - Google Analytics