Netty общается с сервером каждые 10 секунд - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать поток из клиента, который будет связываться с сервером и запрашивать строку SHA-1 каждые 10 секунд, скажем так.Я хочу, чтобы этот поток, например, запускался в фоновом режиме выполняемой мной программы и каждые 10 секунд проверял, совпадает ли строка SHA-1, полученная с сервера, с той, которая хранится локально на компьютере клиента.

Как новичок, я рассмотрел некоторые учебные пособия по Netty, но не могу понять, как создать соединение с клиентом, который отправляет определенное сообщение на сервер каждые x секунд.Нужно ли настраивать клиент (создать новую EvenLoopGroup, initChannel evey 10 секунд) или мне нужно, чтобы ClientHandler расширялся как TimerTask (или поток)?Должен ли я создать 2 клиентских соединения, одно для фонового потока и одно для основной программы, и каждое из них должно иметь разные обработчики?Как сервер может отличить, получено ли сообщение от фонового потока или основной клиентской программы, и работать ли по-другому?

Любая помощь приветствуется, или вы можете просто указать мне на более продвинутые учебники, если таковые имеются.

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете использовать цикл событий клиентского канала для планирования задач и использовать контекст / канал клиента для отправки запроса на строку SHA-1:

public static void scheduleFixedViaEventLoop() {
        Channel ch = CHANNEL_OF_THE_CLIENT_SOMEWHERE; // get reference from somewhere
        ScheduledFuture<?> future = ch.eventLoop().scheduleAtFixedRate(
           new Runnable() {
           @Override
           public void run() {
               ch.writeAndFlush(THE_REQUEST);
               }
           }, 10, 10, TimeUnit.SECONDS);
}

Этот код можно добавить после начальной загрузки клиента.Вам необходимо проверить ответ во входящем обработчике для клиента - для этого вам необходимо иметь возможность отличить ответ для этого конкретного запроса от других ответов.

...