Пожалуйста, помогите мне понять API веб-сокета Pusher в Java

Я хочу использовать соединение Pusher Websocket с использованием официальной библиотеки Java. Я запустил основные функции, такие как подключение к службе данных и получение сообщений. Однако мне трудно реализовать другие функции, такие как чтение статуса соединения. Возможно, вы сможете помочь мне, ответив на некоторые из этих вопросов:

1) Что происходит при запуске пушера и подключении его к сервису (пушер.подключение())? Подключенный толкатель работает в отдельном потоке?

2) Как я могу получить текущее состояние моего push-соединения?

3) Если мой пушер обновляет объект, который параллельно используется другими сервисами, могут ли это вызвать проблемы?

4) Как я могу обрабатывать ошибки/исключения? Пока я ничего не получил, будет ли ошибка выглядеть как обычное исключение или она обрабатывается по-другому?

Спасибо!

Ниже я скопировал свой текущий код. Обратите внимание, что цикл while внизу используется только для тестирования, чтобы код продолжал работать.

import com.pusher.client.Pusher;
import com.pusher.client.channel.Channel;
import com.pusher.client.channel.ChannelEventListener;
import com.pusher.client.channel.SubscriptionEventListener;
import com.pusher.client.connection.ConnectionEventListener;
import com.pusher.client.connection.ConnectionState;
import com.pusher.client.connection.ConnectionStateChange;


public class Testing {

    public static void main(String[] args) throws Exception {


        // Create a new Pusher instance
        Pusher pusher = new Pusher("PusherKey");

        pusher.connect(new ConnectionEventListener() {

            @Override
            public void onConnectionStateChange(ConnectionStateChange change) {
                System.out.println("State changed to " + change.getCurrentState() +
                                   " from " + change.getPreviousState());
            }

            @Override
            public void onError(String message, String code, Exception e) {
                System.out.println("There was a problem connecting!");
            }
        }, ConnectionState.ALL);

        // Subscribe to a channel
         Channel channel = pusher.subscribe("channel", new ChannelEventListener() {
             @Override
             public void onSubscriptionSucceeded(String channelName) {
                 System.out.println("Subscribed!");
             }

             @Override
             public void onEvent(String channelName, String eventName, String data) {
                 System.out.println("desilo se");
             }
         });

         // Bind to listen for events called "my-event" sent to "my-channel"
         channel.bind("my-event", new SubscriptionEventListener() {
             @Override
             public void onEvent(String channel, String event, String data) {
                 System.out.println("Received event with data: " + data);
             }
         });

        while(true){
            try {
            Thread.sleep(1000);
        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
            }

        }
}

}

person user3116232    schedule 03.02.2015    source источник


Ответы (1)


1) Что происходит при запуске пушера и подключении его к сервису (пушер.подключение())? Подключенный толкатель работает в отдельном потоке?

Вы можете увидеть управление потоками и взаимодействие в двух следующих файлах:

Таким образом, взаимодействие с базовым соединением WebSocket происходит в назначенной очереди (с именем eventQueue).

2) Как я могу получить текущее состояние моего push-соединения?

ConnectionState state = pusher.getConnection.getState();

3) Если мой пушер обновляет объект, который параллельно используется другими сервисами, могут ли это вызвать проблемы?

Если у вас многопоточное приложение, вам нужно будет самостоятельно управлять доступом к общим объектам.

Все взаимодействие с кодом вне библиотеки (вашим кодом) происходит в потоке eventQueue.

4) Как я могу обрабатывать ошибки/исключения? Пока я ничего не получил, будет ли ошибка выглядеть как обычное исключение или она обрабатывается по-другому?

Там, где это возможно и уместно, клиентская библиотека Pusher Java будет перехватывать исключения и предоставлять их вашему коду через обратный вызов, например. ConnectionEventListener.onError.

В любой ситуации, когда возникают исключения, которые не обрабатываются библиотекой, вы будете знать, поскольку ваша среда IDE сообщит вам, что вы не обрабатываете случай исключения/ваш код не будет компилироваться, например. Pusher.connect @бросает

person leggetter    schedule 03.02.2015
comment
Спасибо, это действительно помогло. О вопросе 4), как выглядит обратный вызов или как я могу его обработать? Похоже, что обратный вызов просто появится, если что-то произойдет. - person user3116232; 03.02.2015
comment
@user3116232 user3116232 Думаю, вы нашли JavaDocs. Но чтобы ответить на ваши вопросы - это здесь: .github.io/pusher-java-client/com/pusher/client/ - person leggetter; 05.02.2015