SpringBoot WebSocket使用

由于SpringBoot已经整合了WebSocket,使用起来非常方便。这篇博客的前提是已经搭建好SpringBoot项目,如果没有搭建好,请参考http://blog.csdn.net/u010889616/article/details/79561808这篇文章。

项目结构如下:

SpringBoot WebSocket使用_第1张图片

gradle添加依赖

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-websocket
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-websocket', version: '2.0.0.RELEASE'

(1)开启WebSocket服务。

新建WebSocketConfig.java类,添加@Configuration注解

package com.wzj.demo.websocket;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * Created by wzj on 2018/3/14.
 */
@Configuration
public class WebSocketConfig
{
    @Bean
    public ServerEndpointExporter serverEndpointExporter()
    {
        return new ServerEndpointExporter();
    }
}
(2)配置/websocket站点

使用@ServerEndpoint注解来配置/websocket站点,来让前端访问,每一个函数都有注释。

package com.wzj.demo.websocket;

import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * Created by wzj on 2018/3/14.
 */
@ServerEndpoint(value = "/websocket")
@Component
public class MyWebSocket
{
    /**
     * 在线人数
     */
    public static int onlineNumber = 0;

    /**
     * 所有的对象
     */
    public static List webSockets = new CopyOnWriteArrayList();

    /**
     * 会话
     */
    private Session session;

    /**
     * 建立连接
     *
     * @param session
     */
    @OnOpen
    public void onOpen(Session session)
    {
        onlineNumber++;
        webSockets.add(this);

        this.session = session;

        System.out.println("有新连接加入! 当前在线人数" + onlineNumber);
    }

    /**
     * 连接关闭
     */
    @OnClose
    public void onClose()
    {
        onlineNumber--;
        webSockets.remove(this);
        System.out.println("有连接关闭! 当前在线人数" + onlineNumber);
    }

    /**
     * 收到客户端的消息
     *
     * @param message 消息
     * @param session 会话
     */
    @OnMessage
    public void onMessage(String message, Session session)
    {
        System.out.println("来自客户端消息:" + message);

        sendMessage("欢迎连接");
    }

    /**
     * 发送消息
     *
     * @param message 消息
     */
    public void sendMessage(String message)
    {
        try
        {
            session.getBasicRemote().sendText(message);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

(3)在webapp/WEB-INF/jsp目录,新建index.jsp文件

webSocket = new WebSocket("ws://localhost:8080/websocket");  //连接本地后台的/websocket服务

webSocket有三个响应事件onopen(服务连通)、onmesage(收到消息)、onclose(连接被关闭)

<%--
  Created by IntelliJ IDEA.
  User: wzj
  Date: 2016/10/8
  Time: 21:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Index



    
你好

(4)在Controller配置url,来访问index.jsp页面

package com.wzj.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

/**
 * Created by wzj on 2018/3/14.
 */
@RestController
public class WelcomeController
{
    /**
     * 首页
     * @return 测试
     */
    @RequestMapping(value = "/welcome")
    @ResponseBody
    public String welcome()
    {
        return "Hello World";
    }

    @RequestMapping(value = "/index")
    public ModelAndView index(ModelAndView view)
    {
        //设置jsp名字
        view.setViewName("index");

        //传递数据
        view.addObject("name","张三");

        return view;
    }
}

(5)测试

启动SpingBoot,在浏览器输入http://127.0.0.1:8080/index,就会发现日志中打印出,有客户端连接,并收到消息。

SpringBoot WebSocket使用_第2张图片


在浏览器端也收到消息

SpringBoot WebSocket使用_第3张图片

Demo Github地址: https://github.com/HelloKittyNII/SpringBoot/tree/master/SpringBootDemo

你可能感兴趣的:(Spring,Boot)