回复
基于WebSocket实现一个简易的群聊功能(一)
pivoteic
发布于 2022-6-16 17:48
浏览
0收藏
本文主要来讲解如何使用WebSocket来实现一个简易的群聊功能。
引入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
项目的目录结构
接下来,我们来分析每个类的作用。
WebSocketApplication
@SpringBootApplication
public class WebSocketApplication {
public static void main(String[] args) {
SpringApplication.run(WebSocketApplication.class, args);
}
}
这个类就是一个简单的启动引导类的功能。
WebSocketServer:群聊核心类
@Component
@ServerEndpoint(value = "/chat/{username}", configurator = SpringBasedConfigurator.class)
public class WebSocketServer {
private final Map<Session, String> userSessionMap = new ConcurrentHashMap<>();
@OnOpen
public void onOpen(Session session, @PathParam("username") String username) {
userSessionMap.put(session, username);
multicastMessage(session, "欢迎" + username + "加入群聊!");
}
@OnMessage
public void onMessage(Session session, String message) {
String username = userSessionMap.get(session);
multicastMessage(session, username + ": " + message);
}
@OnClose
public void onClose(Session session) {
String username = userSessionMap.remove(session);
multicastMessage(session, username + "退出群聊。");
}
private void multicastMessage(Session session, String message) {
for (Session userSession : userSessionMap.keySet()) {
if (userSession == session) {
//是自己,忽略
continue;
}
try {
userSession.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@ServerEndpoint:作用是用来表明当前类是一个节点类,当连接成功之后,用户的操作都会回调这个类对应的对象的方法,对象怎么创建的是根据configurator 属性对应的类来实现的,默认是每个连接对应的对象都是通过反射构建的,但是对于本群聊功能来说,是通过SpringBasedConfigurator对象来获取,这个类的作用接下来会剖析。
@OnOpen:当客户端与服务端建立连接的时候,会回调 @OnOpen 注解标记的方法
@PathParam:可以看成跟spring mvc中的@PathVariable注解作用一样,就是取出连接路径中的占位符对应的值
@OnMessage:当客户端发送消息给服务端的时候,会回调OnMessage 注解标记的方法
@OnClose:当客户端断开连接的时候,会回调@OnClose注解标记的方法。
Session:是代表当前客户端与服务端建立的一个会话,通过这个对象,服务端可以主动给客户端发送消息。
WebSocketServer这个类的主要作用是保存每个客户端与服务端建立的连接,一旦有客户端跟服务端建立连接、发送消息、断开连接,都会发送消息给其他客户端,从而实现群聊的功能。
文章转自公众号:三友的java日记
标签
已于2022-6-16 17:48:26修改
赞
收藏
回复
相关推荐