`
zk_chs
  • 浏览: 215661 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

spring boot + websocket进行通信

阅读更多

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

 

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

 

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

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

// pom.xml
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
 
之后我们需要添加一个单例bean,名为ServerEndpointExporter
@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter (){
        return new ServerEndpointExporter();
    }
}
 
接下来便能使用websocket了,下面是一个简单的例子:
@ServerEndpoint("/websocket")
@Component
public class MyWebSocket {

    private static int onlineCount = 0;

    private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<>();

    private Session session;

    @OnOpen
    public void onOpen (Session session){
        this.session = session;
        webSocketSet.add(this);
        addOnlineCount();
        System.out.println("有新链接加入!当前在线人数为" + getOnlineCount());
    }

    @OnClose
    public void onClose (){
        webSocketSet.remove(this);
        subOnlineCount();
        System.out.println("有一链接关闭!当前在线人数为" + getOnlineCount());
    }

    @OnMessage
    public void onMessage (String message, Session session) throws IOException {
        System.out.println("来自客户端的消息:" + message);
        // 群发消息
        for ( MyWebSocket item : webSocketSet ){
                item.sendMessage(message);
        }
    }

    public void sendMessage (String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }

    public static synchronized  int getOnlineCount (){
        return MyWebSocket.onlineCount;
    }

    public static synchronized void addOnlineCount (){
        MyWebSocket.onlineCount++;
    }

    public static synchronized void subOnlineCount (){
        MyWebSocket.onlineCount--;
    }

}
 
代码很简单,相信大家都能看懂,接下来贴一下html代码:
<!DOCTYPE HTML>
<html>
<head>
    <base href="localhost://localhost:8080/">
    <title>My WebSocket</title>
</head>

<body>
Welcome<br/>
<input id="text" type="text"/>
<button onclick="send()">Send</button>
<button onclick="closeWebSocket()">Close</button>
<div id="message">
</div>
</body>

<script type="text/javascript">
    var websocket = null;

    //判断当前浏览器是否支持WebSocket
    if ('WebSocket' in window) {
        websocket = new WebSocket("ws://localhost:8080/websocket");
    }
    else {
        alert('Not support websocket')
    }

    //连接发生错误的回调方法
    websocket.onerror = function () {
        setMessageInnerHTML("error");
    };

    //连接成功建立的回调方法
    websocket.onopen = function (event) {
        setMessageInnerHTML("open");
    }

    //接收到消息的回调方法
    websocket.onmessage = function (event) {
        setMessageInnerHTML(event.data);
    }

    //连接关闭的回调方法
    websocket.onclose = function () {
        setMessageInnerHTML("close");
    }

    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
    window.onbeforeunload = function () {
        websocket.close();
    }

    //将消息显示在网页上
    function setMessageInnerHTML(innerHTML) {
        document.getElementById('message').innerHTML += innerHTML + '<br/>';
    }

    //关闭连接
    function closeWebSocket() {
        websocket.close();
    }

    //发送消息
    function send() {
        var message = document.getElementById('text').value;
        websocket.send(message);
    }
</script>
</html>

 

 
接下来便能直接启动websocket进行访问了,具体的扩展可以根据你的业务需求进行增加。
其实websocket就是基于http协议的升级,在http的headers中有一个header名为Upgrade,用来对http协议进行升级,从而换用其他的协议,在本例中,为Upgrade:websocket
 
6
4
分享到:
评论
3 楼 xqlsrjjjh 2017-12-18  
亲测可用,上面所说的html放在src\main\resources\static目录下,名字为index.html,这样在一运行spring boot之后就可以访问到了
2 楼 k88520 2017-02-17  
感谢博主无私分享
1 楼 vbnetvbnet 2016-09-22  

相关推荐

    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则是一种在客户端和服务器之间建立长连接的协议,可以实现双向通信,非常适合于实时数据更新的需求,如进度条显示。 首先,我们需要...

    Spring Boot + WebSocket 开发 WEB即时通信工具(源码)

    websocket 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 ...

    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 Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送.zip

    Spring Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送。 Spring Boot整合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的微服务框架,它简化了创建独立的、...

    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号获取帮助。这样...

Global site tag (gtag.js) - Google Analytics