SpringBoot + WebSocket

来源:互联网 发布:地球人软件试用版 编辑:程序博客网 时间:2024/05/18 02:40

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@EnableWebSocketMessageBrokerpublic 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.(新闻) */@RestControllerpublic 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不支持拖拽文件导入

原创粉丝点击