Spring实现Websocket

来源:互联网 发布:linux mv移动文件夹 编辑:程序博客网 时间:2024/05/17 22:10

1.加入js依赖,浏览器不支持websocket时,使用sockJS

<span style="font-size:18px;"><span style="font-size:18px;"><script type="text/javascript" src="js/sockjs-0.3.4.min.js"></script><script type="text/javascript" src="js/stomp.min.js"></script></span></span>

2.JS实现

<span style="font-size:18px;"><span style="font-size:18px;">   initWebSocketConnection: function () {                //Create stomp client over sockJS protocol                var sock = new SockJS('/webSocketVisitor');                stomp = Stomp.over(sock);                // Connect to server via websocket                stomp.connect({}, _this.connectCallback, _this.errorCallback);            },            disWebSocketWebSocketConnection: function () {                stomp && stomp.disconnect(function () {                });            },            //Callback function to be called when stomp client is connected to server            connectCallback: function () {                stomp.subscribe('/topic/uploadVisitor', _this.parseEvent);            },            //Callback function to be called when stomp client could not connect to server            errorCallback: function () {                alert(jQuery.i18n.prop('pb.label.site.fail.to.link.server.tip'));            },            parseEvent:function (frame) {                var entry = JSON.parse(frame.body);                alert(entry.visitorName)            },</span></span>

3.注册

<span style="font-size:18px;"><span style="font-size:18px;">@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{    @Override    public void registerStompEndpoints(StompEndpointRegistry registry)    {        registry.addEndpoint("/webSocketVisitor").addInterceptors(new HttpSessionHandshakeInterceptor()).withSockJS();    }    @Override    public void configureMessageBroker(MessageBrokerRegistry config)    {        config.enableSimpleBroker("/topic", "/queue");        config.setApplicationDestinationPrefixes("/wsapp");    }}</span></span>
4.消息发送模板

 

<span style="font-size:18px;"><span style="font-size:18px;">@Componentpublic class RegisterVisitorEvent {    @Autowired    private SimpMessagingTemplate message;    public void broadcastVisitor(RegisterVisitor visitor){        message.convertAndSend("/topic/uploadVisitor",visitor);    }}</span></span>

5.调用

 

<span style="font-size:18px;"><span style="font-size:18px;">    @Autowired    private RegisterVisitorEvent registerVisitorEvent;        @RequestMapping(value = "/add")    @ResponseBody    public JsonResponse add(RegisterVisitorCustom visitor, @RequestParam(value = "suiteList[]", required = false) List<Object> suiteList, HttpServletRequest request){        JsonResponse jr = new JsonResponse();        List<Suite> suites = new ArrayList<>();        if (null != suiteList){            for (Object object : suiteList){                Suite suite = JSONObject.parseObject(object.toString(),Suite.class);//将建json对象转换为JavaBean对象                suites.add(suite);            }        }        Admin admin = CurrentAdminUtil.getCurrentAdmin(request);        visitor.setAdminId(admin.getId());        visitor.setAdminName(admin.getName());        visitor.setSuites(suites);        visitor.setCreateTime(new Date());        visitorService.addVisitorAndSuite(visitor);        registerVisitorEvent.broadcastVisitor(visitor);        jr.setSuc(JsonResponse.SUCCESS);        return jr;    }</span></span>



0 0