什么是WebSocket?
WebSocket是一种在客户端和服务器之间建立持久性连接的通信协议,它允许客户端和服务器之间进行全双工通信。
为什么使用WebSocket?
- WebSocket 允许服务器主动向客户端推送数据,同时也支持客户端向服务器发送数据。
- WebSocket 在客户端和服务器之间建议一次连接后,将保持持久性的连接,避免了像HTTP协议中的每次请求都需要建立和断开连接的开销。
- WebSocket是基于TCP协议的,通信延迟性较低,适用于实时性要求比较高的场景。
在gin中如何用WebSocket实现群聊和私聊?
实现群聊还是私聊的关键在于消息发送给谁,如果发送给所有人就是最大的广播了,如果发送给指定人,就实现了私聊还是群聊。
就比如我们建一个群,群里6个人,我们获取到那5个人的id,然后将自己发送的消息,指定给他们接收,那就可以实现群聊了。如果一对一聊天,那我们只用获取到对方一个人的id就行了。
1. 建立WebSocket连接
先建立一个map集合,用来存储所有连接信息。
var clients = make(map[int]*websocket.Conn)
建立一个互斥锁,保证对 clients 的并发安全访问。
var clientMutex sync.Mutex
然后可以使用 websocket.Upgrade()
函数将当前HTTP请求升级为WebSocket连接。
同时也要获取到当前用户id,为了后面实现私聊的功能。
然后将连接的信息添加到map集合中。
func WebSocketHandler(c *gin.Context) {
userID, err := strconv.Atoi(c.Query("userID"))