Java Pusher Client отключается сразу после подключения - PullRequest
0 голосов
/ 17 октября 2019

Я подключаюсь к серверу Pusher с использованием кода JAVA, и проблема заключается в том, что клиент (используя библиотеку Java-клиента) отключается через несколько секунд после подключения к серверу, и он сам не восстанавливает соединение.

Кроме того,состояние соединения в java-клиенте показывает CONNECTED , как показано в методе обратного вызова onConnectionStateChange (), но в фоновом режиме кажется, что он остается отключенным, потому что когда я пытался отправить запрос с сервера, клиент java неполучить что-нибудь, но при переподключении (вручную) я получаю запрос.

Код:

@Component
@Slf4j
public class PosWebSocketClient {

private Pusher pusher;

private boolean isConnected = false;

private String pusherAppKey;

private Timer timer;

private Date activeTime;

private boolean isUserLoggedIn = false;

private PusherOptions pusherOptions;

public synchronized void init(String pusherAppKey) {
    log.info("Initializing Pusher");
    pusher = new Pusher(pusherAppKey/* , pusherOptions() */);
    this.pusherAppKey = pusherAppKey;
    this.isUserLoggedIn = true;
    pusher.connect(new ConnectionEventListener() {
        @Override
        public void onConnectionStateChange(ConnectionStateChange change) {
            log.info("State changed to " + change.getCurrentState() + " from "
                    + change.getPreviousState());

            if (change.getCurrentState() == ConnectionState.CONNECTED) {
                isConnected = true;
            } else {
                isConnected = false;
            }
            log.info("isConnected {}", isConnected);                
        }

        @Override
        public void onError(String message, String code, Exception e) {
            log.info("Error while connecting to the server with {} {} {}", message, code, e.getMessage());
            log.error("Exception: - ",e);
        }
    }, ConnectionState.ALL);


    Channel channel = pusher.subscribe("*****");         
    channel.bind("any-event-1", sendDataListener());
    channel.bind("any-event-2", receiveOrderListener());
    channel.bind("any-event-3", logOutListener());
    channel.bind("any-event-4", getOrderStatusListener());


    activeTime = new Date();
    /*
     * if (timer == null) { timer = new Timer(); timer.schedule(new MyTask(), 0,
     * 1000 * 60 * 2); }
     */
}

class MyTask extends TimerTask {
    public void run() {
        long idleTimeInMinutes = (new Date().getTime() - activeTime.getTime()) / (1000 * 60);
        log.info("Pusher Idle Time {} ", idleTimeInMinutes);
        if (isUserLoggedIn && idleTimeInMinutes >= 10 && StringUtils.isNotBlank(pusherAppKey)) {
            log.info("Pusher idle time is greater than 10 mins, initializing again");
            disconnect();
            init(pusherAppKey);
        }
    }
}

private SubscriptionEventListener logOutListener() {
    return new SubscriptionEventListener() {
        @Override
        public void onEvent(PusherEvent pusherEvent) {
        }
    };
}

private SubscriptionEventListener sendDataListener() {
    return new SubscriptionEventListener() {
        @Override
        public void onEvent(PusherEvent pusherEvent) {
            log.info("Received SendData event");
        }
    };
}

private SubscriptionEventListener receiveOrderListener() {
    log.info("Received FetchOrder event");
    return new SubscriptionEventListener() {
        }
    };
}

private SubscriptionEventListener getOrderStatusListener() {
    log.info("Received SendStatus event");
    return new SubscriptionEventListener() {
        }
    };
}

public synchronized void disconnect() {
    // Disconnect from the service (or become disconnected my network conditions)
    if (pusher != null && pusher.getConnection() != null) {
        log.info("Disconnecting Pusher");
        Channel channel = pusher.getChannel("*****");
        channel.unbind("any-event-1", sendDataListener());
        channel.unbind("any-event-2", receiveOrderListener());
        channel.unbind("any-event-3", logOutListener());
        channel.unbind("any-event-4", getOrderStatusListener());
        pusher.unsubscribe("*****");
        pusher.disconnect();
    }
}

public void restart() {
    if (StringUtils.isNotBlank(pusherAppKey)) {
        log.info("Restarting Pusher");
        disconnect();
        this.init(this.pusherAppKey);
    }
}

/*
 * private PusherOptions pusherOptions() { if (pusherOptions == null) {
 * pusherOptions = new PusherOptions();
 * pusherOptions.setMaxReconnectionAttempts(1000000); } return pusherOptions; }
 */

public boolean isConnected() {
    return isConnected;
}

private void setPusherStatus() {
    activeTime = new Date();
}

public void userLoggedOut() {
    this.isUserLoggedIn = false;
}

}

Используется зависимость maven

    <dependency>
        <groupId>com.pusher</groupId>
        <artifactId>pusher-java-client</artifactId>
        <version>2.0.0</version>
    </dependency>

Может кто-нибудь взглянуть и сообщить мне проблемус кодом или зависимостью или каким-либо свойством, которое мне не хватает при установлении соединения с сервером? ТИА.

...