功能:实现客户端向服务端定时发消息。
public class MyClientHandler extends ChannelInboundHandlerAdapter {
/**
* 给服务端发送消息
* @param ctx
* @throws Exception
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws RejectedExecutionException {
ctx.channel().eventLoop().scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
ctx.writeAndFlush(Unpooled.copiedBuffer("来自客户端的消息", CharsetUtil.UTF_8));
}
}, 1,3, TimeUnit.SECONDS);
}
---------------------省略其他方法-----------------------------
}
服务端接收的消息:

2、schedule的用法
ctx.channel().eventLoop().schedule(new Runnable() {
@Override
public void run() {
ctx.writeAndFlush(Unpooled.copiedBuffer("来自客户端的消息", CharsetUtil.UTF_8));
}
},3,TimeUnit.SECONDS);
方法说明:
/**
* 延迟执行,并不会周期性执行
* @param callable 延迟执行的任务
* @param delay 延迟时间
* @param unit 延迟时间单位
*/
public ScheduledFuture<?> schedule(Runnable command,long delay, TimeUnit unit);
/**
* 延迟执行,并不会周期性执行
* @param callable 延迟执行的任务
* @param delay 延迟时间
* @param unit 延迟时间单位
*/
public <V> ScheduledFuture<V> schedule(Callable<V> callable,long delay, TimeUnit unit);
/**
* 在延迟initialDelay后定时执行任务
* @param command 要执行的任务
* @param initialDelay 初始化延迟
* @param period 两次任务开始执行的延迟
* @param unit 时间单位
* @return
*/
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long initialDelay,
long period,
TimeUnit unit);
/**
* 在延迟initialDelay后定时执行任务
* @param command 要执行的任务
* @param initialDelay 初始化延迟
* @param delay 下一次任务开始距前一次任务结束的时间
* @param unit 时间单位
* @return
*/
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit);
本文介绍了如何在Java中使用Netty框架实现在客户端和服务端之间的定时消息发送,重点讲解了`ChannelInboundHandler`和`scheduleAtFixedRate`方法的使用,以及`eventLoop`在定时任务中的作用。

695

被折叠的 条评论
为什么被折叠?



