Я использую версию netty 4.1.30.Final
, задача сервера netty состоит в том, чтобы отправить расписание данных запроса устройства команды Modbus (1 минута).
Клиентская программа иногда повторно входит в систему, а затем канал не закрывается. канал другой раньше (похоже, устройство поддерживает несколько каналов). Я вручную закрыл предыдущее, но задание на период просыпается.
Netty init code
// group is final EventExecutorGroup group = new DefaultEventExecutor();
.addLast(group, serverDataPacketHandler);
Проверить повторный канал. deviceIdentity - уникальная отправка клиентской программой.
// loginChannels is Map<String, Channel>
if (loginChannels.containsKey(deviceIdentity) && loginChannels.get(deviceIdentity) !=
ctx.channel()) {
// close prev one.
logger.info("repeatedly login");
loginChannels.get(deviceIdentity).close();
loginChannels.put(deviceIdentity, ctx.channel());
} else {
loginChannels.put(deviceIdentity, ctx.channel());
}
когда устройство подключено
Channel channel = ctx.channel();
ctx.executor().scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
logger.info("task start .......");
// send modbus command
channel.writeAndFlush("01 04 00 00 00 01 crc crc");
}, 0, 60, TimeUnit.SECONDS);
Результат:
Задача выполняется не 1 минутный период. когда клиент повторно входит в систему.