SpringBoot + WebSocket

SpringBoot + WebSocket

pom.xml导入插件

<!-- SpringWebSocket依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>

添加Config配置文件

package com.clsystem.Config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

/**
 * Created by pudding on 2017-10-30.(YYR)
 */
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic","/user");//这句表示在topic和user这两个域上可以向客户端发消息;
        config.setApplicationDestinationPrefixes("/app");//这句表示客户端向服务端发送时的主题上面需要加"/app"作为前缀;
        config.setUserDestinationPrefix("/user");//这句表示给指定用户发送(一对一)的主题前缀是“/user/”;
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/cl-socket").setAllowedOrigins("*").withSockJS();//个和客户端创建连接时的url有关,后面在客户端的代码中可以看到。

    }

}

消息请求接口Controller

package com.clsystem.Controller;

import com.alibaba.fastjson.JSONObject;
import com.clsystem.Dto.BaseResult;
import com.clsystem.Dto.Comment;
import com.clsystem.Dto.Press;
import com.clsystem.Service.IPress;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.messaging.simp.annotation.SendToUser;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by pudding on 2017-11-8.(新闻)
 */
@RestController
public class PressController {

    @Autowired
    private SimpMessagingTemplate messagingTemplate;

    @Autowired
    private IPress iPress;

    /**
     * 查询全部新闻
     */
    @MessageMapping("/press")
    @SendTo(value = "/topic/press")//广播式
    public void findPress(@RequestParam("release_object") Integer release_object){

        BaseResult baseResult=iPress.findAllPress(release_object);
        messagingTemplate.convertAndSend("/topic/press", JSONObject.toJSONString(baseResult));
    }


    /**
     * 查询新闻详情
     * @param press
     */
    @MessageMapping("/pressInfo")
    @SendToUser(value = "/topic/pressInfo",broadcast = false)//私有式
    public void  findPressInfo(Press press){

        BaseResult baseResult=iPress.findPressInfo(press.getId());
        messagingTemplate.convertAndSendToUser(press.getId().toString(),"/topic/pressInfo", JSONObject.toJSONString(baseResult));
    }
}

JS 需导入sockjs.min.js 和stomp.min.js 库

<script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.min.js"></script>
        <script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script>


      //请求连接
      function connect(){
            var socket = new SockJS('http://localhost:8096/cl-socket');
            stompClient = Stomp.over(socket);
            stompClient.connect({}, function(frame) {
           });

                stompClient.subscribe('/topic/press', function(data) {
                    alert(data);
                    var json=JSON.parse(data.body);
                });

                stompClient.subscribe('/user/'+2+'/topic/pressInfo', function(data) {
                    var json=JSON.parse(data.body);
                });
        }

        //请求会话
       function send(){
                stompClient.send("/app/press", {}, JSON.stringify({

                 }));

                stompClient.send("/app/pressInfo", {}, JSON.stringify({
                    'id':2
                }));

        }


        //关闭连接
        function disconnect(){
            if (stompClient != null) {
                stompClient.disconnect();//断开连接
            }
        }

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值