현대 웹 애플리케이션 개발에서 WebSocket은 즉각적인 통신과 실시간 데이터 전송을 위한 일반적인 기술입니다. Spring Boot 프레임워크는 통합 WebSocket에 대한 지원을 제공하므로 개발자가 푸시 및 알림 기능을 구현하는 것이 매우 편리합니다.
이 기사에서는 WebSocket을 사용하여 Spring Boot에서 푸시 및 알림 기능을 구현하는 방법을 소개하고 간단한 실시간 온라인 채팅방 구현을 시연합니다.
먼저 Spring Boot 프로젝트를 생성해야 합니다. Spring Initializr 웹 사이트에서 웹 및 WebSocket 종속성을 사용하여 새 프로젝트를 빠르게 생성할 수 있습니다. 코드는 다음과 같습니다.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> </dependencies>
다음으로 WebSocket을 Spring Boot 애플리케이션에서 실행할 수 있도록 구성해야 합니다.
먼저 애플리케이션의 구성 파일에 다음 속성을 추가해야 합니다.
spring.websocket.enabled=true
다음으로 WebSocket 지원을 활성화하려면 Spring Boot 구성 클래스에 @EnableWebSocket
주석을 추가하세요. 동시에 WebSocketConfigurer
인터페이스를 구현하고 여기에 핸들러와 메시지 인터셉터를 등록하여 WebSocket 요청과 메시지를 처리해야 합니다. @EnableWebSocket
注解,启用WebSocket支持。同时,我们需要实现一个WebSocketConfigurer
接口,在其中注册处理程序和消息拦截器,以便处理WebSocket请求和消息。
代码如下:
@Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new WebSocketHandler(), "/chat").setAllowedOrigins("*").withSockJS(); } }
在上面的代码中,我们注册了一个处理程序(即WebSocketHandler),该处理程序在客户端连接到“/ chat”端点时被调用。使用setAllowedOrigins
方法来指定允许的来源,以便进行跨域请求,使用withSockJS
方法以启用SockJS支持,以便与不支持WebSocket的浏览器兼容。
现在我们需要编写处理程序类,这个类会处理所有的WebSocket请求和消息。
在Spring Boot中,这个类只需要实现WebSocketHandler
接口即可。我们将使用SimpeTextWebSocketHandler
类,该类提供了处理WebSocket消息的基本功能,并且我们可以在其基础上扩展自己的处理程序。
代码如下:
public class WebSocketHandler extends TextWebSocketHandler { private final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.add(session); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { for (WebSocketSession s : sessions) { if (s.isOpen() && !s.equals(session)) { s.sendMessage(message); } } } }
在上面的代码中,afterConnectionEstablished
方法在新的WebSocket会话建立时被调用,afterConnectionClosed
方法在WebSocket会话关闭时被调用。handleTextMessage
方法处理所有的WebSocket消息,并发送给所有当前连接的客户端。
现在,我们需要创建一个WebSocket客户端来测试实现的推送和通知功能。可以使用JavaScript的WebSocket API来创建一个WebSocket客户端。
代码如下:
const socket = new WebSocket('ws://localhost:8080/chat'); socket.onopen = function() { console.log('连接已建立'); }; socket.onmessage = function(event) { console.log('收到消息:', event.data); }; socket.onerror = function(error) { console.log('发生错误:', error); }; socket.onclose = function() { console.log('连接已关闭'); };
在上面的代码中,我们创建了一个WebSocket实例并尝试连接到ws:// localhost:8080 / chat
。然后,我们监听WebSocket事件以获取打开,关闭,错误和消息事件。
现在,我们可以启动Spring Boot应用并测试推送和通知功能。我们可以使用两个或多个WebSocket客户端来模拟不同的用户,并在一个客户端输入消息并将其广播到所有会话中的其他客户端。
使用Maven运行spring-boot:run
rrreee
위 코드에서는 클라이언트가 "/chat" 엔드포인트에 연결할 때 호출되는 핸들러(예: WebSocketHandler)를 등록했습니다. 교차 출처 요청에 허용되는 출처를 지정하려면setAllowedOrigins
메서드를 사용하고, WebSocket을 지원하지 않는 브라우저와의 호환성을 위해 SockJS 지원을 활성화하려면 withSockJS
메서드를 사용하세요. 이제 모든 WebSocket 요청과 메시지를 처리할 핸들러 클래스를 작성해야 합니다.
🎜Spring Boot에서 이 클래스는WebSocketHandler
인터페이스만 구현하면 됩니다. WebSocket 메시지 처리를 위한 기본 기능을 제공하는 SimpeTextWebSocketHandler
클래스를 사용하고 이를 기반으로 자체 핸들러를 확장할 수 있습니다. 🎜🎜코드는 다음과 같습니다. 🎜rrreee🎜위의 코드에서는 새로운 WebSocket 세션이 생성될 때 afterConnectionUsed
메서드가 호출되고, WebSocket 세션이 닫힙니다. handleTextMessage
메서드는 모든 WebSocket 메시지를 처리하고 현재 연결된 모든 클라이언트에 보냅니다. 🎜ws://localhost:8080/chat
에 연결을 시도합니다. 그런 다음 열기, 닫기, 오류 및 메시지 이벤트에 대한 WebSocket 이벤트를 수신합니다. 🎜spring-boot:run
명령을 실행하여 애플리케이션을 시작하세요. 🎜🎜이제 여러 브라우저 창을 열고 각 창에 WebSocket 클라이언트를 생성해 보세요. 메시지를 입력하고 보내기 버튼을 눌러 채팅 중인 모든 세션의 다른 WebSocket 클라이언트에 메시지를 푸시하세요. 🎜🎜🎜요약🎜🎜🎜이 튜토리얼에서는 Spring Boot와 WebSocket을 사용하여 푸시 및 알림 기능을 구현하는 방법을 배웠습니다. WebSocket 지원을 통해 우리는 사용자 경험을 향상시키고 애플리케이션의 가치를 높이는 실시간, 협업 및 멀티캐스트 애플리케이션을 만들 수 있습니다. 🎜위 내용은 Spring Boot에서 WebSocket을 사용하여 푸시 및 알림 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!