工作前提:两个服务之间实现聊天通讯,因为介于两个服务,两个客户端
方案1:多个服务端,多个客户端,使用redis把用户数据ip进行存储,交互拿到redis数据进行推送
方案2: 一个服务端,多个客户端,拿到客户端的id和需要推送的id进行拼接存储
此文章使用的是方案2
1. 引入依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2. 加入配置进行扫描
ServerEndpointExporter 是由Spring官方提供的实现,用于扫描@ServerEndpoint注解实例。
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
3. 服务端,这里主要是前端访问地址:ws://ip:port/push/websocket/{ {"fromUserId":"321654","toUserId":"123456"}},这个地址主要用于建立连接,会去主动调用onOpen方法,然后当客户端(前端)发送消息时,会主动调用onMessage方法,再进行自己一列处理后,再推送给它需要发送的userId(用户),就去调用senndMessage方法。
@Component
@ServerEndpoint("/push/websocket/{param}")
@Slf4j
@EqualsAndHashCode
public class WebSocketServer {
/**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/
private static int onlineCount = 0;
/**concurrent包的线程安全Set,用来存放每个客户端对应的WebSocket对象。*/
p