# 聊天服务(后端)
**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)