# WebSocket入门与案例实战 **Repository Path**: Yenn-2017_admin/websocket_demo1 ## Basic Information - **Project Name**: WebSocket入门与案例实战 - **Description**: 学习——WebSocket入门与案例实战 https://www.imooc.com/learn/1369 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-12-14 - **Last Updated**: 2025-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebSocket入门与案例实战 #### 介绍 学习——WebSocket入门与案例实战 https://www.imooc.com/learn/1369 1. 简介:本课程带领大家入门 WebSocket,探索 WebSocket 协议通信流程,基于 Java 注解和 Spring 框架两种方式实现 WebSocket 服务器端,HTML、CSS、JS 实现 WebSocket 客户端,并实战多人聊天室系统。课程面向想要入门 WebSocket 的小伙伴,讲解粒度至每一行代码。 ## 第1章 课程介绍 ### 1-1 课程介绍 (04:0324092) 1. 学习内容 - WebSocket概述 :为什么? - Java接入WebSocket的两种方式:怎么用? - 实战:多人聊天室: 在哪用 2. 所需技能 1. 熟悉Java语法 2. 了解Maven、 Spring Boot的基本使用 3. 面向人群:想要入门WebSocket的同学 3. 开发环境: - JDK 1.8 - 开发工具IDEA - Maven ## 第2章 WebSocket 概述 ### 2-1 WebSocket 知多少? (06:2824093) 1. B/S架构如何交互 - http请求只能从浏览器发起,方向固定,不能从服务器发起 - ![image-20231214102558243](.\images\image-20231214102558243.png) 2. PC网站二维码支付 - ![image-20231214102649519](.\images\image-20231214102649519.png) - 微信支付完整流程官方API https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_2.shtml 3. 替代方案 - 问题:服务器无法直接向浏览器发送请求 - 常见替代方案**轮询** - 轮询缺陷:浪费带宽,实时性差,服务器压力大 4. WebSocket协议 - 2008年提出,201 1年成为标准 - HTML5新增的协议 - 可以在浏览器和服务器之间建立一个***全双工***的通信通道 ### 2-2 探索 WebSocket 实现浏览器与服务器的通信过程 (07:3824094) 1. 通信流程 1. 浏览器发起http请求,请求建立WebSocket连接 - ![image-20231214103543292](.\images\image-20231214103543292.png) 2. 服务器响应同意协议更改 - ![image-20231214103801126](.\images\image-20231214103801126.png) 3. 相互发送数据 - ![image-20231214103942094](E:\A_workspace\websocket_demo1\images\image-20231214103942094.png) - 绿色箭头是浏览器向服务器发送,红色箭头是服务器向浏览器发送 4. test0.html - ```html Document
测试1
``` 5. 通信流程 - ![image-20231214131657013](E:\A_workspace\websocket_demo1\images\image-20231214131657013.png) 6. 底层原理 - WebSocket协议建立在tcp协议基础上的,所以服务器端也容易实现,不同的语言都有支持 - tcp协议是全双工协议,http协议基于它,但设计成了单向的 - WebSocket没有同源限制 ## 第3章 Java 实现 WebSocket 两种方式 ### 3-1 基于 Java 注解实现 WebSocket 服务器端 (18:3924095) 1. 使用Spring封装 - ![image-20231214134331502](E:\A_workspace\websocket_demo1\images\image-20231214134331502.png) 2. 需要的类 1. 服务终端类:用java注解来监听连接@ServerEndpoint、 连接成功@OnOpen、连接关闭@OnClose、收到消息等状态@OnMessage 2. 配置类:把spring中的ServerEndpointExporter对象注入进来 3. 创建项目: ### 3-2 HTML + CSS + JS 实现 WebSocket 客户端 (05:0724097) ### 3-3 基于 Spring 框架实现 WebSocket 服务器端 (20:1024098) 1. Spring提供的类和接口 - HttpSessionHandshakelnterceptor (抽象类) :握手拦截器,在握手前后添加操作 - AbstractWebSocketHandler (抽象类) : WebSocket处理程序,监听连接前,连接中,连接后 - WebSocketConfigurer (接口) :配置程序,比如配置监听哪个端口,上面的握手拦截器,处理程序的使用 2. WebSocket连接 - ![image-20231215111439447](E:\A_workspace\websocket_demo1\images\image-20231215111439447.png) ## 第4章 WebSocket 实战多人聊天室 ### 4-1 WebSocket 实战多人聊天室 (17:1124099) 1. 需求分析 - 进入聊天室 - 群聊功能,任何人说话,所有人都能接到提醒 - 退出群聊 2. ### 4-2 浅谈 WebSocket 其他应用场景 (05:3624100) 1. 代码地址 https://gitee.com/duoli-java/websocket-demo.git 2. 常见的场景: - 客服聊天 - 流程管理的项目:领导分配给下属,实时消息提醒。 - 弹幕,比如bilibili。 - 股票基金的数据,图表:基金指数。 - 网页版的在线游戏,联机。 - 有道词典:统计总数。 - ![image-20231214165702838](E:\A_workspace\websocket_demo1\images\image-20231214165702838.png) ## 第5章 课程总结 ### 5-1 课程总结 (02:3024102) 1. 总结 - 为什么需要 - 是什么 - 怎么用 - 应用场景