Как выполнить действие после задержки в netty-socketio?

Всем привет.


Пишу сервис на Java используя вот эту чудесную библиотеку.
github.com/mrniko/netty-socketio


Столкнулся со следующей задачей. К сервису подключаются пользователи и для каждого из них, мне надо отсчитать тридцать секунд, а затем выполнить некоторое действие.

Честно говоря не совсем представляю себе как подступиться к этой задаче.

Таймер java вроде бы выполняется отдельным потоком, но как связать этот таймер с событийной моделью данной библиотеки — у меня не хватает опыта. Как я понимаю, в данной библиотеке, входящие данные обрабатываются отдельным потоком и передаются в функции — слушатели, которые так-же крутятся в отдельных потоках. Я вижу решение, в том, чтобы имитировать поступление данных из потока таймера и передавать событие на обработку, каждую секунду. Но шестое чувство подсказывает мне, что должен быть способ проще и также многопоточный.


Собственно вопрос, как в java обычно решают такие задачи? Какие варианты решить эту задачу с помощью этой библиотеки?

Спасибо.
  • Вопрос задан
  • 3076 просмотров
Решения вопроса 2
Делается в Java подобное посредством ScheduledExecutorService.
В библиотеке это реализовано так и так
Вообще советую разобраться с содержимым пакета java.util.concurrent.

Собственно советую глянуть Atmosphere - отлично интегрируется в Play2 / Grails, и поддержка в целом получше. С Socket.io там проблем нет.
Ответ написан
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Можно так
import io.netty.util.Timer;
import io.netty.util.TimerTask;

timer.newTimeout(new TimerTask() {
    @Override
    public void run(Timeout timeout) throws Exception {
        // Отложенное действие
    }
}, 30, TimeUnit.SECONDS);

но лучше так
eventLoop.schedule(() -> {
    // Отложенное действие
}, 30, TimeUnit.MILLISECONDS);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Да код таймера выполняется отдельным потоком, скорее всего нужно создать новый класс таймера, в конструкторе которого передавать SocketIOClient client и сохранять в свойстве таймера, тогда из события таймера можно будет отсылать сообщения в client, если он еще не отключился. Только вот нужно узнать, класс SocketIOClient потоко-безопастный или нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
TEAMIDEA Тверь
от 70 000 до 120 000 руб.
Health Gorilla Москва
от 190 000 руб.
App-Smart Краснодар
от 1 500 eur.
26 июн. 2019, в 15:21
600 руб./в час
26 июн. 2019, в 15:06
50000 руб./за проект
26 июн. 2019, в 14:56
300 руб./в час