一、需求

  • 股价展示页面实时的获取股价更新
  • 赛事的文字直播 实时更新赛况
  • 通过页面启动一个任务 前端想知道任务后台的实时运行状态

    二、服务端推送常用技术

  • 全双工通信 webSocket

  • 服务端主动推送SSE (server and event )直接建立在http协议上 长连接

    三、双工通信webSocket

  • 兼容HTTPS协议

    • WebSocket的ws协议是基于HTTP
    • WebSocket的wss协议是基于HTTPS
  • 全双工数据交互
    • onopen
    • onmessage
    • image.png
  • 群发

    • image.png

      四、实现websocket

  • 加依赖

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-websocket</artifactId>
    4. </dependency>
  • 实现websocketConfig

    1. @Configuration
    2. public class WebSocketConfig {
    3. @Bean
    4. public ServerEndpointExporter serverEndpointExporter() {
    5. return new ServerEndpointExporter();
    6. }
    7. }
  • 实现MyWebSocket

    • 需要添加的注解
      • @ ServerEndpoint(value=”/websocket”)
      • @Compenent
    • 变量声明

      1. /**
      2. * 静态变量,用来记录当前在线的连接数
      3. */
      4. private static int onlineCount = 0;
      5. /**
      6. * concurrent包中的线程安全的Set,用来存放每个客户端MyWebSocket对象
      7. */
      8. private static CopyOnWriteArraySet<MyWebSocket> myWebSockets = new CopyOnWriteArraySet<>();
      9. /**
      10. * 与某个客户端的连接会话
      11. */
      12. private Session session;
    • 实现方法

      • 建立连接
        • image.png
      • 连接关闭
        • image.png
      • 封装基础的发送消息的操作
        • image.png
      • 发送消息【添加@OnMessage注解】
        • image.png
      • 群发消息
        • image.png
      • 出现错误【添加@OnError注解】
        • image.png
  • 前端长时间和后台保持通讯的三种方式:ajax的setInterval、webSocket、SSE
    • ajax长时间和服务端保持通讯太占内存
    • websocket可以进行服务器和前端双向通讯
    • SSE只能进行服务器往前端单向传送数据