前些天做了一个网站:modubox.cn 其中有个群聊插件,许多人问如何实现的。这里简单说下,为了快速完成群聊功能,我选择从最简单的 WebSocket 开始。
什么是WebSocket ?
既然要使用它,就需要了解一下它吧。WebSocket其实也是一种基于TCP的网络协议,它与HTTP协议最大的不同是:是一种双向通信协议,在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,而HTTP协议只能客户端主动发起通信。
所以WebSocket能够用于聊天,当然其他地方也能应用,如果做客服系统或推送消息都可以从这里开始。
如何实现单聊/群聊?
群聊:所有客户端的消息发送到服务器,服务端将消息发送给所有客户端。
单聊:WebSocket客户端之间是无法直接通信的,想要通信,必须由服务端转发。
群聊单聊
实现
1. 引入WebSocket的支持
我们使用当前最流行的Spring Boot框架构建项目,然后引入Spring Boot 对 WebSocket 的支持:
1 | xml复制代码<dependency> |
2. 开启WebSocket
1 | typescript复制代码@Configuration |
3. 服务端
这里主要有以下几点:
- 声明服务端点路径
- 存储所有连接用户,等待匹配用户
- 连接 onOpen,消息OnMessage,关闭onClose,错误onError 方法
- 发送消息给特定连接者
@ServerEndpoint(value = “/websocket/random/“)
@Component
public class ChatRandomServer {
//所有连接
public static ConcurrentHashMap<String, ChatRandomServer> webSocketSet = new ConcurrentHashMap<>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
//所有在配对的ID
private static List webSocketLiveList = new CopyOnWriteArrayList();
//自己的id标识
private String id = “”;
//连接对象的id标识
private String toUser = “”;
1 | scss复制代码/** |
}
4. 前端支持
1 | kotlin复制代码 start: function () { |
以上代码不完整,如果需要看下完整代码,联系我。
本文转载自: 掘金