精华内容
下载资源
问答
  • SpringBootwebSocket 消息发送与接收 webSocket 消息推送于接收 个人信息推送 springBoot项目,直接下载 导包就能执行
  • springboot websocket实例
  • github:ZeroBz 例子:https://github.com/niezhiliang/springbootwebsocket

    github:ZeroBz

    例子:https://github.com/niezhiliang/springbootwebsocket

     

     

     

     

    展开全文
  • springbootwebsocket.zip

    2019-10-31 17:07:17
    基于springboot的websocket示例代码,实现了一个实时日志显示功能,页面有心跳和重连接功能。启动后访问http://localhost:9099/logger.html
  • 这样的话,一个springbootWebSocket开发环境就搭建完成了。 还有一点要记录的就是: springboot提供了两个消息的拦截器。 ChannelInterceptor: 可以对消息发送之前和消息发送之后,进行操作。需要实现它,...

    springboot webSocket环境搭建

    pom编辑:

    添加如下内容:

    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-starter</artifactId>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-starter-websocket</artifactId>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-starter-web</artifactId>
    
    <version>2.0.3.RELEASE</version>
    
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    
    <dependency>
    
    <groupId>com.alibaba</groupId>
    
    <artifactId>fastjson</artifactId>
    
    <version>1.2.34</version>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    
    <version>2.0.3.RELEASE</version>
    
    </dependency>

     

     启动类

    加入注解:@EnableWebSocketMessageBroker

    package com.fxb.socketdemo2;
    
    
    
    import org.springframework.boot.SpringApplication;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
    
    
    
    @SpringBootApplication
    
    @EnableWebSocketMessageBroker
    
    public class SocketDemo2Application {
    
    
    
    public static void main(String[] args) {
    
    SpringApplication.run(SocketDemo2Application.class, args);
    
    }
    
    }

    ## 实体类

    ·RequestMessage: 请求的消息内容。

    
    public class RequestMessage {
    
    
    
    /**
    
    * 消息内容
    
    */
    
    private String msg;
    
    
    
    
    
    /**
    
    * 获取 消息内容
    
    *
    
    * @return msg 消息内容
    
    */
    
    public String getMsg() {
    
    return this.msg;
    
    }
    
    
    
    /**
    
    * 设置 消息内容
    
    *
    
    * @param msg 消息内容
    
    */
    
    public void setMsg(String msg) {
    
    this.msg = msg;
    
    }
    
    }
    
    }
    
    ```
    
    · ResponserMessage: 响应的消息内容
    
    ```
    
    public class ResponseMessage {
    
    
    
    /**
    
    * 响应内容
    
    */
    
    private String responseMessage;
    
    
    
    
    
    /**
    
    * 获取 响应内容
    
    *
    
    * @return responseMessage 响应内容
    
    */
    
    public String getResponseMessage() {
    
    return this.responseMessage;
    
    }
    
    
    
    /**
    
    * 设置 响应内容
    
    *
    
    * @param responseMessage 响应内容
    
    */
    
    public void setResponseMessage(String responseMessage) {
    
    this.responseMessage = responseMessage;
    
    }
    
    }

    ```

    ## 编写Controller,消息主要处理逻辑

    ```

    package com.fxb.socketdemo2.rest;
    
    
    
    import com.alibaba.fastjson.JSONObject;
    
    import com.fxb.socketdemo2.entity.RequestMessage;
    
    import com.fxb.socketdemo2.entity.ResponseMessage;
    
    import org.slf4j.Logger;
    
    import org.slf4j.LoggerFactory;
    
    import org.springframework.messaging.handler.annotation.MessageMapping;
    
    import org.springframework.messaging.handler.annotation.SendTo;
    
    import org.springframework.stereotype.Controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    
    import javax.servlet.http.HttpServletRequest;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    
    
    /**
    
    * socket-demo2
    
    *
    
    * @author fangjiaxiaobai@163.com
    
    * @date 2018-09-30
    
    */
    
    @Controller
    
    public class BroadcastRest {
    
    
    
    private Logger logger = LoggerFactory.getLogger(getClass());
    
    
    
    private AtomicInteger count = new AtomicInteger(0);
    
    
    
    @RequestMapping(value = "/broadcast/index")
    
    public String boradcastIndex(HttpServletRequest request) {
    
    logger.info("登录人IP:{}", request.getRemoteHost());
    
    return "broadcast";
    
    }
    
    
    
    @MessageMapping("receive")
    
    @SendTo("/topic/getResponse")
    
    public ResponseMessage broadcast(RequestMessage requestMessage) {
    
    logger.info("接收到的消息:第{}条:", count.incrementAndGet(), JSONObject.toJSONString(requestMessage));
    
    ResponseMessage responseMessage = new ResponseMessage();
    
    responseMessage.setResponseMessage(requestMessage.getMsg());
    
    return responseMessage;
    
    }
    
    }

    ```

    ## 编写配置信息

    * 配置MVC

    ```

    package com.fxb.socketdemo2.config;
    
    
    
    import org.springframework.context.annotation.Configuration;
    
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    
    
    /**
    
    * socket-demo2 -- MVC配置
    
    *
    
    * @author fangjiaxiaobai@163.com
    
    * @date 2018-09-30
    
    */
    
    @Configuration
    
    public class MyWebMvcConfigurer implements WebMvcConfigurer {
    
    
    
    @Override
    
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    
    registry.addResourceHandler("/templates/**")
    
    .addResourceLocations("classpath:/templates/**");
    
    }
    
    }
    
    ```
    
    * 配置WebSocket
    
    ```
    
    package com.fxb.socketdemo2.config;
    
    
    
    import org.springframework.context.annotation.Configuration;
    
    import org.springframework.messaging.handler.annotation.MessageMapping;
    
    import org.springframework.messaging.simp.config.ChannelRegistration;
    
    import org.springframework.messaging.simp.config.MessageBrokerRegistry;
    
    import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
    
    import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
    
    import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
    
    
    
    /**
    
    * socket-demo2
    
    *
    
    * @author fangjiaxiaobai@163.com
    
    * @date 2018-09-30
    
    */
    
    @Configuration
    
    @MessageMapping
    
    // 此注解表示使用STOMP协议来传输基于消息代理的消息,此时可以在@Controller类中使用@MessageMapping
    
    @EnableWebSocketMessageBroker
    
    public class MyWebSocketMessageBrokerConfigurer implements WebSocketMessageBrokerConfigurer {
    
    
    
    @Override
    
    public void registerStompEndpoints(StompEndpointRegistry registry) {
    
    registry.addEndpoint("/websocket-simple")
    
    .setAllowedOrigins("*")
    
    .withSockJS();
    
    }
    
    
    
    @Override
    
    public void configureClientInboundChannel(ChannelRegistration registration) {
    
    WebSocketMessageBrokerConfigurer.super.configureClientInboundChannel(registration);
    
    }
    
    
    
    @Override
    
    public void configureMessageBroker(MessageBrokerRegistry registry) {
    
    registry.enableSimpleBroker("/topic", "/queue");
    
    }
    
    }

    ```

    ## 最后在写一个html页面,做一个简单的测试:

    ```

    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    
    <html lang="en">
    
    <head>
    
    <meta charset="UTF-8">
    
    <title>Title</title>
    
    <script type="text/javascript" src="/templates/static/js/sockjs.0.3.min.js"></script>
    
    <script type="text/javascript" src="/templates/static/js/stomp.js"></script>
    
    <script type="text/javascript" src="/templates/static/js/jquery-3.3.1.min.js"></script>
    
    </head>
    
    <body onload="disconnect()">
    
    <div>
    
    <div>
    
    <button id="connect" onclick="connect();">连接</button>
    
    <button id="disconnect" disabled="disabled" onclick="disconnect();">断开连接</button>
    
    </div>
    
    <div id="conversationDiv">
    
    <label>输入你的名字</label><input type="text" id="name"/>
    
    <button id="sendName" onclick="sendName();">发送</button>
    
    <p id="response"></p>
    
    </div>
    
    </div>
    
    
    
    <script type="text/javascript">
    
    var stompClient = null;
    
    
    
    function setConnected(connected) {
    
    document.getElementById('connect').disabled = connected;
    
    document.getElementById('disconnect').disabled = !connected;
    
    document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
    
    $('#response').html('');
    
    }
    
    
    
    function connect() {
    
    // websocket的连接地址,
    
    // 此值等于WebSocketMessageBrokerConfigurer中registry.addEndpoint("/websocket-simple").withSockJS()配置的地址
    
    var socket = new SockJS('/websocket-simple');
    
    stompClient = Stomp.over(socket);
    
    stompClient.connect({}, function (frame) {
    
    setConnected(true);
    
    console.log('Connected: ' + frame);
    
    // 客户端订阅消息的目的地址:此值BroadcastCtl中被@SendTo("/topic/getResponse")注解的里配置的值
    
    stompClient.subscribe('/topic/getResponse', function (respnose) {
    
    showResponse(JSON.parse(respnose.body).responseMessage);
    
    });
    
    });
    
    }
    
    
    
    
    
    function disconnect() {
    
    if (stompClient != null) {
    
    stompClient.disconnect();
    
    }
    
    setConnected(false);
    
    console.log("Disconnected");
    
    }
    
    
    
    function sendName() {
    
    var name = $('#name').val();
    
    console.log("name=",name);
    
    // 客户端消息发送的目的:服务端使用BroadcastCtl中@MessageMapping("/receive")注解的方法来处理发送过来的消息
    
    stompClient.send("/receive", {}, JSON.stringify({'msg': name}));
    
    }
    
    
    
    function showResponse(message) {
    
    var response = $("#response");
    
    response.append("<h3>" + message + "</h3>");
    
    }
    
    </script>
    
    </body>
    
    
    
    </html>

    ```

    当然,这个也需要引入几个重要的js配置文件。比如SOCkejs.js和stomp.js以及jquery.js等。

     

     

    这样的话,一个springbootWebSocket开发环境就搭建完成了。

    还有一点要记录的就是:

    springboot提供了两个消息的拦截器。

    ChannelInterceptor: 可以对消息发送之前和消息发送之后,进行操作。需要实现它,重写其方法即可。

    HandshakeInterceptor:可以对握手前后,进行操作。实现它,重写方法。

     

    ### 最后
    如果你觉得写的还不错,就关注下公众号呗,关注后,有点小礼物回赠给你。
    你可以获得5000+电子书,java,springCloud,adroid,python等各种视频教程,IT类经典书籍,各种软件的安装及破解教程。
    希望一块学习,一块进步!

     

    若有幸被您看到这篇日记,发现了错误,希望您不吝指教。博客留言或微信wxy540843763,备注:方小白博客。感激。

     

    展开全文
  • 一个springboot集成websocket的简单例子,好多网上资源无法用,特上传
  • spring boot webSocket

    2018-07-12 09:30:04
    spring boot 2.0 websocket stomp 实现广播通信和一对一通信聊天
  • springboot开发websocket使用到的js文件包括sockjs.min.js 、stomp.js
  • 通过webSocket实现点对点,群聊,以及系统消息通讯,redis队列实现离线消息。
  • 项目基于springboot2.0 项目实现了websocket点对点和广播两种方式。分别演示了http和ws两种不同协议下的请求。前端采用SocketJs和Stomp.js。主要提供了解决思路。需要的可以在此基础上进行延伸。
  • springboot和一些框架的整合,swagger有问题可能会打不开
  • 消息|0 大概就是这个格式,后面为0就是群发,别的就是指定用户, 练习spring boot时候弄的,不喜勿喷,俺也是花了点时间的啊,还整理了。。。导进去就可以运行,只要3C哦
  • springboot+websocket+mysql,实现实时聊天系统,简单demo。包括login 登录页、register 注册页、friend_list 好友列表、message_conver聊天视图 四个页面。
  • 基于消息队列、spring boot、websocket实现的消息推送模型代码
  • 用spring官网的简洁spring boot demo,整合netty实现高并发websocket,并引入slf4g+lombok,采用maven形式;直接导入运行,有测试页面也有实现代码及详细注释,主要参考了望星辰大海的博客,,欢迎下载学习~~(想...
  • Springboot多连接池+websocket,相关详细技术说明可进入我的CSDN看博文哦~~如果有问题可在csdn上留言或者通过QQ694335719联系
  • Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送
  • SpringBoot WebSocket消息推送(群发和指定到个人或多人),导入项目可以直接运行。
  • 使用spring boot+websocket实现一个websocket连接,使用IDEA打开项目,运行Application.java运行后台,然后打开localhost:8080打开前端即可测试
  • 前面我们已经学习了 WebSocket 的在线群聊实现 本篇文章主要来学习使用 WebSocket 实现消息的一对一发送。 ...一、前期配置 前面依赖部分和 WebSocket 的在线群聊实现 的一致,不过这里还需要添加 Spring Security 的...

    前面我们已经学习了 WebSocket 的在线群聊实现 本篇文章主要来学习使用 WebSocket 实现消息的一对一发送。

    一、前期配置

    前面依赖部分和 WebSocket 的在线群聊实现 的一致,不过这里还需要添加 Spring Security 的依赖:

    	<dependency>
                
    展开全文
  • springbootwebsocket . config ; import com . alibaba . fastjson . JSONObject ; import org . slf4j . Logger ; import org . slf4j . LoggerFactory ; import org . springframework . stereotype . ...

    最近需要做一个网络流量的实时可视化,决定采用Kafka+WebSocket的方式实现。

    一、WebSocket简介

    WebSocket网上很多教程,这里不详细描述。简单来说:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

    二、SpringBoot实现WebSocket

    maven依赖如下

    		<!--Web项目必须加上-->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter</artifactId>
    		</dependency>
    
    		<!-- springboot websocket -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-websocket</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		
    		<!--Kafka依赖包-->
    		<dependency>
    			<groupId>org.apache.kafka</groupId>
    			<artifactId>kafka_2.12</artifactId>
    			<version>2.3.0</version>
    		</dependency>
    

    编写以下代码启用WebSocket

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.socket.server.standard.ServerEndpointExporter;
    
    /**
     * @author 李奇峰
     * 2019年5月10日11:08:22
     * websocket的配置
     */
    @Configuration
    public class WebSocketStompConfig{
        @Bean
        public ServerEndpointExporter serverEndpointExporter()
        {
            return new ServerEndpointExporter();
        }
    }
    

    编写WebSockerServer类

    此类中的session连接会话全都保存在了一个静态的Map对象websocketClients 中,在开启连接时将连接会话根据连接名保存在此Map中,方便后续Kafka发送消息时进行全局调用。

    package com.fsl.springbootwebsocket.config;
    
    import com.alibaba.fastjson.JSONObject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    import javax.websocket.*;
    import javax.websocket.server.PathParam;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    
    /**
     * @author 2019年5月10日11:08:16
     */
    @Component
    @ServerEndpoint("/websocket/{socketname}")
    public class WebSocketServer {
        private Logger logger = LoggerFactory.getLogger(this.getClass());
        /**
         * 以通道名称为key,连接会话为对象保存起来
         */
        public static Map<String, Session> websocketClients = new ConcurrentHashMap<String, Session>();
        /**
         * 会话
         */
        private Session session;
        /**
         * 通道名称
         */
        private String socketname;
    
        /**
         * 发送消息到指定连接
         * @param socketname 连接名
         * @param jsonString 消息
         */
        public static void sendMessage(String socketname,String jsonString){
            Session nowsession = websocketClients.get(socketname);
            if(nowsession!=null){
                try {
                    nowsession.getBasicRemote().sendText(jsonString);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        @OnOpen
        public void onOpen(@PathParam("socketname") String socketname, Session session)
        {
    
            this.socketname = socketname;
            this.session = session;
            if(websocketClients.get(socketname)==null){
                websocketClients.put(socketname, session);
                System.out.println("当前socket通道"+socketname+"已加入连接");
            }
        }
    
        @OnError
        public void onError(Session session, Throwable error) {
            logger.info("服务端发生了错误"+error.getMessage());
        }
        /**
         * 连接关闭
         */
        @OnClose
        public void onClose()
        {
            websocketClients.remove(socketname);
            System.out.println("当前socket通道"+socketname+"已退出连接");
    
        }
    
        /**
         * 收到客户端的消息
         *
         * @param message 消息
         * @param session 会话
         */
        @OnMessage
        public void onMessage(String message, Session session){
            System.out.println("当前收到了消息:"+message);
            session.getAsyncRemote().sendText("来自服务器:"+this.socketname+"你的消息我收到啦");
        };
    
        /**
         * 向所有连接主动推送消息
         * @param jsonObject 消息体
         * @throws IOException
         */
        public void sendMessageAll(JSONObject jsonObject) throws IOException {
            for (Session item : websocketClients.values()) {
                item.getAsyncRemote().sendText(jsonObject.toJSONString());
            }
        }
    
    }
    
    

    三、Kafka实现

    此消费者在消费消息时,会调用WebSockerServer类中的sendMessage函数,将消息发送到websocket中
    此类继承了Thread类,因为Kafka运行时会一直监听通道中的消息,为了避免进程阻塞,我们将其作为单独的线程来运行

    import org.apache.kafka.clients.consumer.Consumer;
    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.apache.kafka.clients.consumer.ConsumerRecords;
    import org.apache.kafka.clients.consumer.KafkaConsumer;
    import java.util.*;
    
    import static com.fsl.springbootwebsocket.config.WebSocketServer.sendMessage;
    
    public class SocketConsumer extends Thread {
    
        @Override
        public void run(){
            Properties prop = new Properties();
            System.out.println("启动kafka消费者....");
            prop.put("bootstrap.servers","cdh3:9092");
            prop.put("group.id","socket");
            prop.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            prop.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    //如果是之前存在的group.id
            Consumer consumer = new KafkaConsumer(prop);
            consumer.subscribe(Arrays.asList("zeek_test"));
            while (true) {
                ConsumerRecords<String, String> c = consumer.poll(100);
                for(ConsumerRecord<String, String> c1: c) {
                    System.out.println(c1.value());
                    sendMessage("socket",c1.value());
                }
            }
        }
    }
    

    在此类在SpringBoot注册并启动

    import org.springframework.stereotype.Component;
    
    @Component
    public class ConsumerLinster  {
        public ConsumerLinster(){
            System.out.println("启用Kafka监听器");
            SocketConsumer socketConsumer = new SocketConsumer();
            socketConsumer.start();
            System.out.println("Kafka监听器启用成功");
        }
    }
    

    此项目整体的目录结构如下图所示
    在这里插入图片描述

    四、测试

    将此项目运行后,打开http://www.websocket-test.com/此网址即可进行在线测试
    在这里插入图片描述

    展开全文
  • 可以实现服务端-客户端高效低功耗完美双向通信 可选择使用websocket或者sockJS连接服务器,观察方便,完美观察连接全过程。
  • 前言 前两章教程,我们使用WebSocket的基础特性打造了一个小小聊天室,并在第二章对其进行了集群化改造。 系列教程回顾: [WebSocket]第一章:手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket) ...
  • springboot+websocket实现服务端、客户端

    万次阅读 多人点赞 2019-01-12 12:54:43
    一、引言 小编最近一直在使用springboot框架开发项目,毕竟现在很多公司都在采用此框架,之后小编也会陆续写关于springboot开发常用功能的文章。 什么场景下会要使用到websocket的呢? websocket主要功能就是实现...
  • Springboot+Websocket示例

    2019-06-20 09:57:53
    简单的Springboot+Websocket示例,超级简单,打开即用。做了两个页面,A页面发送消息到Controller,Controller转发消息到B页面,无需刷新页面,展示消息。
  • 概述 本文对websocket集群的方案进行讨论: 实现websocket集群。 通过webscoket实现前端实时接收服务推送的信息的功能; 将指定的消息推送到指定的用户 ...在上个博文Spring Boot系列20 Spring Websocket实现向指定...
  • websocket最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。 浏览器和服务器只需要要做一个握手的动作,在建立连接之后,服务器可以主动传送数据给客户端,客户端也可以随时向服务器...
  • 首先要在websocket 中设置关键,下图 @ServerEndpoint("/websocket/{sid}") @Component public class WebSocketServer { private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);...
  • Spring Boot整合WebSocket

    2020-11-24 23:38:12
    WebSocket协议 基于TCP的一种新的网络协议,它实现了浏览器与服务器全双工通信——允许服务器主动向客户端推送消息。 目前很多浏览器已经实现了WebSocket协议,但是依旧存在着很多浏览器没有实现该协议,为了兼容...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 200
精华内容 80
关键字:

springbootwebsocket

spring 订阅