>  기사  >  Java  >  Java API 개발에서 실시간 통신을 위해 Websocket 사용

Java API 개발에서 실시간 통신을 위해 Websocket 사용

WBOY
WBOY원래의
2023-06-19 09:02:201508검색

인터넷의 지속적인 발전으로 인해 웹 애플리케이션의 실시간 요구 사항이 점점 더 높아지고 있습니다. 전통적인 HTTP 프로토콜은 상태 비저장 요청-응답 통신 방법이고 요청과 응답이 단방향 단기 연결이기 때문에 실시간 통신 요구를 충족할 수 없습니다. 따라서 실시간 통신의 요구를 충족시키기 위해 Websocket 기술이 탄생했습니다. Websocket은 클라이언트와 서버가 지속적인 양방향 연결을 설정하고 통신 프로세스 중에 임의로 데이터를 보낼 수 있도록 하는 전이중, 장기 연결, 실시간 통신 기술입니다.

Java API(애플리케이션 프로그래밍 인터페이스)를 개발 언어로 사용하면 Websocket을 쉽게 실시간 통신에 사용할 수 있습니다. Java API는 Websocket 개발을 더욱 간단하고 효율적으로 만들기 위한 몇 가지 도구 클래스와 프레임워크를 제공합니다. 본 글에서는 Java API 개발에서 실시간 통신을 위해 Websocket을 활용하는 방법을 다음과 같은 측면에서 소개하겠습니다.

1. Websocket의 기본 사용

Java API는 Java 언어에서 Websocket 기술을 지원하기 위한 JSR-356 표준을 제공합니다. Java API의 Websocket 인터페이스는 Websocket과 관련된 기본 메소드 및 이벤트 처리 메소드를 제공하며, 개발자는 이러한 메소드를 사용하여 자신의 Websocket 서버 및 클라이언트를 구현할 수 있습니다.

Java API를 사용하여 Websocket 프로그램을 개발하려면 javax.websocket.server.ServerEndpoint 주석과 javax.websocket.OnMessage 주석이 필요합니다. 그중 @ServerEndpoint 주석은 웹소켓 서비스의 URL, 인코딩 방법(예: UTF-8), 메시지 프로세서(예: WebSocketHandler) 및 기타 구성 정보를 지정하는 데 사용됩니다. @OnMessage 주석은 Websocket 서비스가 클라이언트가 보낸 메시지를 수신할 때 호출되는 지정된 유형의 메시지 처리 방법을 선언하는 데 사용됩니다. 클라이언트가 메시지를 보내면 메시지가 추출 및 구문 분석된 후 처리를 위해 지정된 메시지 처리 방법으로 전달됩니다. 메시지 처리 방법은 Websocket Session 객체를 통해 응답 메시지를 보낼 수 있습니다.

다음은 간단한 예제 코드입니다.

@ServerEndpoint(value = "/test")
public class WebSocketDemo {

    @OnMessage
    public String handleMessage(String message, Session session) {
        System.out.println("Received message: " + message);
        String echoMsg = "Echo from server: " + message;

        // 发送响应消息
        try {
            session.getBasicRemote().sendText(echoMsg);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return echoMsg;
    }
}

위 코드는 URL "/test"에 바인딩된 WebSocketDemo라는 WebSocket 핸들러를 정의합니다. 클라이언트가 메시지를 보내면 WebSocketDemo의 handlerMessage 메소드가 호출되고 응답 메시지가 전송됩니다.

2. Spring Boot를 사용하여 Websocket 개발 단순화

Spring Boot는 Spring 프레임워크 기반의 개발 프레임워크이며 Websocket도 잘 지원할 수 있습니다. Spring Boot를 사용하면 Websocket 기술을 Java API 프로젝트에 더 쉽게 통합할 수 있으므로 애플리케이션 개발이 가속화됩니다.

먼저 Spring Boot 프로젝트의 pom.xml 파일에 다음 종속성을 추가해야 합니다.

<dependency> 
   <groupId>org.springframework.boot</groupId> 
   <artifactId>spring-boot-starter-websocket</artifactId> 
</dependency>

그런 다음 Spring Boot 애플리케이션에서 WebSocketHandler 클래스를 정의해야 합니다. WebSocketHandler 클래스는 Spring의 WebSocketHandler 인터페이스에서 상속하고 클라이언트가 보낸 텍스트 메시지를 처리하기 위해 handlerTextMessage() 메서드와 같은 몇 가지 기본 메서드를 구현해야 합니다.

public class MyHandler extends TextWebSocketHandler {

   @Override
   public void handleTextMessage(WebSocketSession session, TextMessage message) 
           throws InterruptedException, IOException { 

        String payload = message.getPayload(); 

        // 处理消息
        String echoMsg = "Echo from server: " + payload;

        // 发送响应消息
        session.sendMessage(new TextMessage(echoMsg)); 
   } 

}

마지막으로 WebSocket은 Spring의 구성 파일에서 구성되어야 합니다. 애플리케이션을 부팅합니다. 아래와 같이

@Configuration 
@EnableWebSocket 
public class WebSocketConfig implements WebSocketConfigurer { 

    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 

        registry.addHandler(new MyHandler(), "/myHandler").setAllowedOrigins("*"); 
   } 

}

위 코드에서 MyHandler 클래스는 URL "/myHandler"에 바인딩되고 도메인 간 요청을 허용하도록 설정됩니다. 자체 WebSocket 핸들러를 구현하거나, URL을 수정하거나, 다른 구성 옵션을 사용할 수 있습니다. Spring Boot를 사용하면 Websocket 개발에 많은 편의성을 제공하고 개발 프로세스를 단순화할 수 있습니다.

3. Javascript를 사용하여 Websocket 클라이언트 개발

Java API를 사용하여 Websocket 서버를 개발하는 동안 서버와 통신하려면 Websocket 클라이언트를 개발해야 합니다. Javascript의 websocket API를 사용하면 Websocket을 쉽게 사용하여 웹 애플리케이션에서 클라이언트 통신을 구현할 수 있습니다.

Javascript에서 Websocket을 사용하려면 먼저 Websocket 개체를 만들고 Websocket 서버 주소를 지정해야 합니다.

var ws = new WebSocket("ws://localhost:8080/test");

그런 다음 다음 코드를 사용하여 Websocket 서버에서 메시지를 보내고 응답 메시지를 받을 수 있습니다.

ws.onopen = function() {
   alert("Websocket连接已建立!");
   ws.send("Hello world!");
}; 

ws.onmessage = function(evt) {
   var receivedMsg = evt.data;
   alert("Received message: " + receivedMsg);
   ws.close();
};

위 코드는 ws://localhost:8080/test에서 Websocket 서버로 URL에 연결하고 "Hello world!"라는 문자열이 포함된 메시지를 보냅니다. 서버는 메시지를 처리하면 응답 메시지를 보내고, 결국 클라이언트는 응답 메시지를 받고 연결을 닫습니다.

4. Websocket은 채팅방과 같은 애플리케이션을 구현합니다

위의 소개를 통해 Websocket 프로그래밍을 위해 Java API를 사용하는 방법과 Javascript 클라이언트를 사용하여 통신하는 방법을 이해했다고 믿습니다. 다음으로 Websocket을 사용하여 간단한 채팅방 애플리케이션을 구현해 보겠습니다.

먼저 Websocket 클라이언트에서 보낸 메시지를 처리하기 위해 Java API를 사용하여 Websocket 프로세서를 구현해야 합니다.

@ServerEndpoint(value = "/chat/{username}")
public class ChatServer {

    private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) {
        // 将用户加入到聊天室中
        clients.add(session);

        // 广播消息
        broadcast(username, " joined the chat room!");
    }

    @OnMessage
    public void onMessage(String message, Session session, @PathParam("username") String username) {
        // 广播消息
        broadcast(username, ": " + message);
    }

    @OnClose
    public void onClose(Session session, @PathParam("username") String username) {
        // 将用户从聊天室中移除
        clients.remove(session);

        // 广播消息
        broadcast(username, " left the chat room!");
    }

    private static void broadcast(String username, String message) {
        // 向所有用户广播消息
        for (Session client : clients) {
            try {
                client.getBasicRemote().sendText(username + message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

以上代码定义了一个名为 ChatServer 的 Websocket 处理器,绑定到 URL “/chat/{username}”。当客户端连接到聊天室时,ChatServer 的 onOpen 方法将被调用,并将客户端添加到 clients 集合中,然后广播一条 “加入聊天室” 的消息。当客户端在聊天室中发送一条消息时,ChatServer 的 onMessage 方法将被调用,并向聊天室的所有客户端广播一条消息。当客户端离开聊天室时,ChatServer 的 onClose 方法将被调用,并将客户端从 clients 集合中移除,然后广播一条 “离开聊天室” 的消息。

然后,需要使用简单的 HTML 和 Javascript 代码实现一个 Websocket 客户端:

<!DOCTYPE html>
<html>
<head>
   <title>Chat room</title>
</head>
<body>
   <h1>Chat room</h1>
   <div id="messageArea"></div>
   <form>
       <input type="text" id="inputField" onkeydown="return send(event)">
   </form>

   <script>
       var ws = new WebSocket("ws://localhost:8080/chat/"+prompt("Please enter your name:"));

       ws.onmessage = function(evt) {
           var receivedMsg = evt.data;
           var messageArea = document.getElementById("messageArea");
           messageArea.innerHTML += receivedMsg + "<br>";
       };

       function send(event) {
           if (event.keyCode == 13) {
               event.preventDefault();
               var inputField = document.getElementById("inputField")
               ws.send(inputField.value);
               inputField.value = "";
               return false;
           }
       }
   </script>
</body>
</html>

以上代码将会要求用户输入他们的名称,然后使用 Websocket 连接到 ChatServer 上。用户可以在输入框中输入文本并按下回车键进行发送。当接收到来自 ChatServer 的消息时,HTML 页面将在聊天窗口底部添加一条新的消息。

通过使用 Java API 和 Websocket 技术,我们可以方便地实现高效、实时的 Web 应用程序。无论你是在开发聊天室、在线游戏还是其他实时 Web 应用程序,Websocket 都可以是一个很好的选择。现在开始尝试使用 Websocket,构建自己的实时 Web 应用程序吧!

위 내용은 Java API 개발에서 실시간 통신을 위해 Websocket 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.