Как слушать события с вебсокета в java?

Пользователь

от deshaun_cormier , в категории: Java , 9 месяцев назад

Как слушать события с вебсокета в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jeromy_ruecker , 9 месяцев назад

@deshaun_cormier 

Для прослушивания событий с веб-сокета в Java можно использовать библиотеку "javax.websocket", которая входит в стандартное API Java EE.


Вот пример Java-кода для создания клиента веб-сокета и прослушивания событий:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;

@ClientEndpoint
public class WebSocketClient {
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Соединение установлено: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("Получено сообщение: " + message);
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        System.out.println("Соединение закрыто: " + closeReason.getReasonPhrase());
    }

    @OnError
    public void onError(Throwable error) {
        System.out.println("Произошла ошибка: " + error.getMessage());
    }

    public static void main(String[] args) {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        String uri = "ws://localhost:8080/websocket"; // вставьте URI вашего веб-сокета
        try {
            Session session = container.connectToServer(WebSocketClient.class, URI.create(uri));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Вы можете изменить методы onOpen, onMessage, onClose, onError по вашим потребностям. В методе onMessage вы можете обрабатывать приходящие данные от сервера через веб-сокет.


Убедитесь, что в вашем проекте присутствует зависимость на javax.websocket API, если нет, вы можете добавить следующую зависимость в ваш файл pom.xml:

1
2
3
4
5
6
7
<dependencies>
    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.1</version>
    </dependency>
</dependencies>


Или в build.gradle:

1
2
3
dependencies {
    implementation 'javax.websocket:javax.websocket-api:1.1'
}


Обратите внимание, что код выше предполагает, что у вас уже есть веб-сокет-сервер, на который вы хотите подключиться. Вы должны указать правильный URI для подключения в переменной uri.

Пользователь

от gage , 3 месяца назад

@deshaun_cormier 

Также возможно использование сторонних библиотек для работы с веб-сокетами, например, библиотеку Tyrus, которая является реализацией стандарта JSR-356 (Java API for WebSocket). Для использования Tyrus вам потребуется добавить ее зависимость в ваш проект. Пример использования Tyrus для прослушивания событий с веб-сокета:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import javax.websocket.ClientEndpoint;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import org.glassfish.tyrus.client.ClientManager;

@ClientEndpoint
public class WebSocketClient {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Соединение установлено: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("Получено сообщение: " + message);
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("Соединение закрыто");
    }

    @OnError
    public void onError(Session session, Throwable t) {
        System.out.println("Произошла ошибка: " + t.getMessage());
    }

    public static void main(String[] args) {
        ClientManager client = ClientManager.createClient();
        try {
            client.connectToServer(WebSocketClient.class, "ws://localhost:8080/websocket");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Для использования Tyrus вам также потребуется добавить зависимость в ваш проект. Пример для Maven:

1
2
3
4
5
<dependency>
    <groupId>org.glassfish.tyrus</groupId>
    <artifactId>tyrus-client</artifactId>
    <version>1.17.1</version>
</dependency>


Или для Gradle:

1
implementation 'org.glassfish.tyrus:tyrus-client:1.17.1'


Выбор использования стандартной библиотеки javax.websocket или библиотеки Tyrus зависит от ваших предпочтений и требований проекта.