# 聊天服务(后端) **Repository Path**: xiyue925/chat-service ## Basic Information - **Project Name**: 聊天服务(后端) - **Description**: 8月实训项目后端仓库 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-03 - **Last Updated**: 2023-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 8月实训-超市电商系统(聊天服务)——后端开发仓库 --- ## 一、推送注意事项: 使用各自的开发分支,即测试负责的功能点无报错后上传至自己的分支 功能需求完成后,合并至总开发分支(develop最终测试完成后,合并至主分支(master
## 二、技术说明 本次开发,为实现实时聊天功能,使用了WebSocket协议 ### 1、什么是WebSocket? WebSocket是一种协议,设计用于提供低延迟、全双工长期运行的连接,以实现客户端与服务器之间高效、实时性更强的通信 *全双工:一种通信方式,通信的两个参与方可以同时发送和接收数据,不需要等待对方的响应或传输完成
### 2、什么是实时通信? 传统通信:电子邮件、网页浏览...存在延迟,需要用户主动请求来获取更新数据 实时通信:即时消息传递、音视频通话、在线会议和实时数据传输等,可以实现即时的数据传输和交流,不需要用户主动请求或刷新来获取更新数据
### 3、WebSocket之前的世界 轮询:客户端定期向服务器发送请求 长轮询:在客户端发出请求后,保持连接打开,等待新数据响应后再关闭连接 Comet:基于HTTP的模型。保持长连接,在返回请求后继续保持连接打开
### 4、WebSocket的优势 WebSocket的出现填补了传统的HTTP协议在实时通信方面的不足,它允许客户端和服务器之间通过单个TCP连接进行双工通信,并且进行实时的数据交换。 双向实时通信:允许在单个、长时间的连接上进行双向实时通信。在需要快速实时更新的应用程序里,比HTTP更加高效 降低延迟:连接一旦建立便会保持开放,数据可以在客户端和服务器之间,以比HTTP更低的延迟进行传输 更高效的资源利用:可以减少重复请求和响应的开销,因为它的连接只需要建立一次
### 5、WebSocket常用库 Javascript:[Socket.IO](http://socket.io/) C#:[SignalR](https://github.com/SignalR/SignalR) & [SuperWebSocket](https://github.com/kerryjiang/SuperWebSocket) Python:[tornado.websocket](http://t.csdn.cn/PkqRZ) & [autobahn](http://t.csdn.cn/KnG5A) Java:[javax.websocket](https://gitee.com/mirrors/Java-WebSocket) & [Jetty](https://gitee.com/mirrors/jetty) ...
### 6、如何建立WebSocket连接 客户端发送WebSocket的升级请求:通过HTTP发送一次常规的Get请求,并在请求头中带上Upgrade,目的是告诉服务器我想要从HTTP升级成WebSocket。之后客户端和服务器双方便可以随时向彼此发送信息 服务器作出响应:Connection:Upgrade,连接就被升级成了WebSocket连接
### 7、为什么需要心跳机制? 为了保持 WebSocket 稳定的长连接,在连接建立之后,服务器和客户端之间通过心跳包来保持连接状态,以防止连接因为长时间没有数据传输而被切断*心跳包:一种特殊的数据包,不包含任何实际数据,仅用来维持连接状态 通常情况下,心跳包由客户端和服务器端定期发送一个空的数据帧,以确保双方之间的连接仍然有效,避免连接因为长时间没有数据传输而被中断 如果在一段时间内没有收到对方的心跳包,就可以认为连接已经断开,需要重新建立连接
### 8、WebSocket的限制 不提供加密功能:如果有安全上的需求,需要采用其他方式来确保安全性,如:SSL协议,设置黑白名单... 不支持古老的浏览器:不支持IE10以前的版本,需要使用AJAX或者其他方式来进行替代 优化很重要:保持长连接需要服务器不断地维护和处理连接状态,需要优化性能
## 三、友情链接 [8月实训-超市电商系统(聊天服务)——前端前台开发仓库](https://gitee.com/yu--sy/chat-service.git) [8月实训-超市电商系统(聊天服务)——前端后台开发仓库](https://gitee.com/abc123ldy520520/chat-service-front-end-backend.git)