`
zhaohaolin
  • 浏览: 1010830 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

netty心跳代码【转】

 
阅读更多

类:ServerNIOHandler 别看名字是server它其实是客户端的handler,这个我是用来做反向连接的。所有handler的超类

import java.net.ConnectException;
import java.util.concurrent.TimeUnit;

import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.jboss.netty.channel.ChannelHandler.Sharable;
import org.jboss.netty.util.Timeout;
import org.jboss.netty.util.Timer;
import org.jboss.netty.util.TimerTask;

import com.zrat.server.nio.factory.ServerPipelineFactory;
@Sharable
public abstract class ServerNIOHandler extends SimpleChannelUpstreamHandler{
    final ClientBootstrap bootstrap;
    private final Timer timer;
    private long startTime = -1;

    public ServerNIOHandler(ClientBootstrap bootstrap, Timer timer) {
        this.bootstrap = bootstrap;
        this.timer = timer;
    }
   
    @Override
    public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) {
        timer.newTimeout(new TimerTask() {
            public void run(Timeout timeout) throws Exception {
                bootstrap.connect();
            }
        }, ServerPipelineFactory.RECONNECT_DELAY, TimeUnit.SECONDS);
    }

    @Override
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
        if (startTime < 0) {
            startTime = System.currentTimeMillis();
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
        Throwable cause = e.getCause();
        if (cause instanceof ConnectException) {
            startTime = -1;
            ctx.getChannel().close();
        }
        e.getCause().printStackTrace();
       
    }

}

类:ServerPipelineFactory 管道工厂类

import static org.jboss.netty.channel.Channels.pipeline;
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.handler.codec.serialization.ObjectDecoder;
import org.jboss.netty.handler.codec.serialization.ObjectEncoder;
import org.jboss.netty.util.Timer;

import com.zrat.server.nio.handler.CommandHandler;
import com.zrat.server.nio.handler.FileHandler;

public class ServerPipelineFactory implements ChannelPipelineFactory {

    private Timer timer;
    private ClientBootstrap bootstrap;
   
    public static final int RECONNECT_DELAY = 5;
   
    public ServerPipelineFactory(ClientBootstrap bootstrap,Timer timer){
        super();
        this.timer = timer;
        this.bootstrap = bootstrap;
    }
   
    public ChannelPipeline getPipeline() throws Exception {
        ChannelPipeline pipeline = pipeline();

        pipeline.addLast("decoder", new ObjectDecoder());
        pipeline.addLast("encoder", new ObjectEncoder());

        pipeline.addLast("fileHandler", new FileHandler(bootstrap,timer));
        pipeline.addLast("commandHandler", new CommandHandler(bootstrap,timer));
        return pipeline;
    }
}

调用方法:

public void start(){
        final Timer timer = new HashedWheelTimer();
        final ClientBootstrap bootstrap = new ClientBootstrap(
                new NioClientSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));
        bootstrap.setPipelineFactory(new ServerPipelineFactory(bootstrap,timer));

        bootstrap.setOption(
                "remoteAddress", new InetSocketAddress(host, port));
        bootstrap.connect();
    }

分享到:
评论

相关推荐

    netty心跳连接代码

    netty心跳连接代码

    netty 心跳实现

    Netty 心跳示例代码 ```java public class HeartbeatHandler extends ChannelDuplexHandler { private final ScheduledExecutorService scheduler; private final long heartbeatInterval; // 心跳间隔 ...

    SpringBoot整合Netty心跳机制过程详解

    SpringBoot 整合 Netty 心跳机制过程详解 SpringBoot 整合 Netty 心跳机制过程详解是指通过 SpringBoot 框架整合 Netty 网络框架来实现心跳机制的过程。心跳机制是指客户端和服务端之间的连接维持机制,当客户端和...

    netty基于http socket websocke及心跳包机制t的demo

    5. 示例代码展示如何在Java中编写和运行Netty应用。 这个demo将是一个很好的学习资源,帮助开发者理解Netty框架在实际应用中的工作原理,以及如何结合HTTP、Socket和WebSocket实现复杂的网络通信需求。通过研究这个...

    netty 代码.rar

    这个“netty 代码.rar”文件很可能包含了关于如何使用 Netty 实现特定即时通讯功能的示例代码。下面将详细介绍 Netty 的核心概念、特性以及在即时通讯中的应用。 1. **Netty 核心概念** - **BossGroup 和 ...

    用netty实现长连接和心跳监测的示例代码

    用netty实现长连接和心跳监测的示例代码

    netty代码demo.rar

    这个“netty代码demo.rar”文件很可能是包含了一些Netty的基础使用示例,帮助开发者理解和学习Netty的工作原理以及如何在实际项目中应用。 Netty的核心特性包括: 1. **异步I/O模型**:Netty基于Java NIO(非阻塞I...

    Netty3.5代码例子

    在“Netty3.5代码例子”中,你可能会看到以下几个关键组件: - **Bootstrap**:这是启动服务器或客户端的入口点,配置网络连接的各种参数。 - **ServerBootstrap**:用于创建服务器端的Bootstrap。 - **...

    netty 心跳检测

    通过以上步骤,我们可以创建一个完整的Netty心跳检测系统。在实际应用中,还需要考虑性能优化,如避免过多的心跳包导致的网络拥堵,以及合理设置心跳间隔和超时时间,以平衡检测效率和资源消耗。 这个"netty-test...

    netty学习demo(初学代码结构+固定消息+自定义分隔符+自定义协议+心跳+http+序列化压缩+自动断线)

    在这个“netty学习demo”中,我们将会探索Netty的基础使用,包括初学代码结构、固定消息处理、自定义分隔符、自定义协议、心跳机制、HTTP支持以及序列化和压缩功能,最后还会涉及自动断线的处理。 首先,让我们从...

    netty 断线重连+心跳

    netty使用自带工具类实现断线重连和心跳包

    netty实战代码-netty-in-action.zip

    4. **强大的心跳与空闲检测**:Netty支持自定义心跳包和空闲状态检测,能有效地防止网络延迟或连接中断带来的问题。 5. **易于扩展和优化**:Netty的API设计简洁,允许开发者方便地扩展新的协议、处理逻辑和优化...

    netty通信以及心跳demo

    "netty-chat" 文件可能是一个简单的 Netty 聊天应用示例,包含客户端和服务器端代码。通过这个项目,你可以学习如何使用 Netty 创建一个简单的聊天应用,包括用户登录、消息发送和接收,以及心跳机制的实现。 总的...

    netty-代码.zip

    8. **心跳机制与空闲检测**:Netty 支持自定义心跳包和空闲检测策略,用于保持长连接的活跃性,防止因网络延迟或异常导致的通信中断。 在“netty-demo”项目中,你可能会看到以下示例: - **基本的TCP服务端和...

    Netty实战代码-2019-Netty-Action-Mayday-2019.zip

    《Netty实战代码-2019-Netty-Action-Mayday-2019》是针对Netty框架的一份实战教程,包含了2019年Netty开发的实例代码。Netty是一个高性能、异步事件驱动的网络应用程序框架,主要用于快速开发可维护的高性能协议...

    netty源码最新版

    Netty 支持心跳机制和空闲状态检测,以保持连接活跃并检测网络故障。理解这些机制的工作原理,可以帮助开发者实现健壮的网络服务。 8. **WebSocket 和 HTTP/2 支持** Netty 提供了对 WebSocket 和 HTTP/2 的支持...

    netty学习之心跳.rar

    在“netty学习之心跳.rar”这个压缩包中,包含的是关于Netty如何实现心跳处理的示例代码,分别针对Netty 3和Netty 5两个版本。心跳机制在网络通信中扮演着至关重要的角色,它确保了连接的活跃性,并能及时检测到网络...

    用Netty实现Websocket(包含服务器代码和客户端网页)

    此外,可以使用WebSocket心跳机制检测连接是否正常,防止连接长时间无数据交换导致的断开。 通过以上步骤,你可以构建一个基本的基于Netty的WebSocket服务器和客户端。然而,实际项目中可能还需要处理更多复杂情况...

    netty官方例子

    这个“netty官方例子”压缩包提供了一系列的示例代码,帮助开发者更好地理解和运用Netty框架。这些例子是基于Netty 4版本,已经整理为可直接运行的Maven工程,便于开发者在本地进行实践和学习。 首先,我们要了解...

    netty框架,服务端、客户端代码示例

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速...通过学习和理解这段代码,开发者可以进一步探索Netty的高级特性,如编解码器、心跳机制、安全性和性能优化等,从而更好地应用到实际的项目开发中。

Global site tag (gtag.js) - Google Analytics