-
netty长连接服务器断开后,客户端如何重新连接5
private static Bootstrap b = new Bootstrap();
public static void start() throws Exception {
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
// b = new Bootstrap(); // (1)
b.group(workerGroup); // (2)
b.channel(NioSocketChannel.class); // (3)
b.option(ChannelOption.SO_KEEPALIVE, true); // (4)
b.option(ChannelOption.ALLOW_HALF_CLOSURE,true);
b.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
// 以("\n")为结尾分割的 解码器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter()));
// 字符串解码 和 编码
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encoder", new StringEncoder());
// 自己的逻辑Handler
pipeline.addLast("handler", new SimpleChannelInboundHandler() {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
logger.debug("接收到的状态内容:" + o.toString());
}
@Override
public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
logger.debug("连接成功");
}
@Override
public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
logger.debug("======channelActive========");
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
logger.debug("======channelInactive========");
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
logger.debug("======exceptionCaught========"+cause.getMessage());
}
});
}
});
// Start the client.
ChannelFuture f = b.connect("127.0.0.1",8060).sync(); // (5)
// Wait until the connection is closed.
f.channel().closeFuture().sync();
}finally{
workerGroup.shutdownGracefully();
}
}2014年5月26日 13:34
4个答案 按时间排序 按投票排序
-
前2天才实现了这个,后来整个设计又把长连接改成短连接..
就是短线重连,服务器重启的时候,等服务器启动好了,能让客户端重连上,对吧。
由于采用的是长连接,因此当connection断掉后,你client端的channelClosed是能感知到的。在这里写一个scheduleExecute,然后不断连接,直到成功。
长连接,就是不允许断,那么只要close你就去连就可以了2014年5月26日 18:30
-
public class MyInboundHandler extends SimpleChannelInboundHandler { private Client client; public MyInboundHandler(Client client) { this.client = client; } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { final EventLoop eventLoop = ctx.channel().eventLoop(); eventLoop.schedule(new Runnable() { @Override public void run() { client.createBootstrap(new Bootstrap(), eventLoop); } }, 1L, TimeUnit.SECONDS); super.channelInactive(ctx); } } public class Client { private EventLoopGroup loop = new NioEventLoopGroup(); public static void main( String[] args ) { new Client().run(); } public Bootstrap createBootstrap(Bootstrap bootstrap, EventLoopGroup eventLoop) { if (bootstrap != null) { final MyInboundHandler handler = new MyInboundHandler(this); bootstrap.group(eventLoop); bootstrap.channel(NioSocketChannel.class); bootstrap.option(ChannelOption.SO_KEEPALIVE, true); bootstrap.handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { socketChannel.pipeline().addLast(handler); } }); bootstrap.remoteAddress("localhost", 8888); bootstrap.connect().addListener(new ConnectionListener(this)); } return bootstrap; } public void run() { createBootstrap(new Bootstrap(), loop); } }
2014年5月26日 14:43
相关推荐
在Netty中,我们可以通过实现ChannelInboundHandler接口并重写channelInactive()方法来监听连接断开事件,然后在该方法中启动一个定时任务,当连接断开时尝试重新连接。这样,即使在网络不稳定或服务器故障的情况下...
在Java服务端,开发者可以利用Netty构建出稳定且高效的网络服务器,处理来自客户端的连接请求。 C#客户端这边,DotNetty是.NET平台上的一个类似Netty的框架,它允许C#开发者创建基于TCP、UDP、HTTP、WebSocket等...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在“netty5长连接.自动重连”这个主题中,我们将深入探讨 Netty 如何实现长连接以及自动重连的机制。 首先,...
在Android环境中,由于安全和权限限制,我们通常需要在后台服务中运行Netty服务器,而在Activity或Service中创建Netty客户端。通过Handler进行主线程和网络线程之间的数据交互,确保UI更新的及时性和线程安全性。 ...
提供的源码可能包含了Android客户端如何建立和维持与Netty服务器的Socket长连接,以及双方如何交换数据的示例。 在分析源码时,应关注以下几个关键点: 1. Android客户端如何创建Socket连接并保持连接。 2. 如何在...
Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。在本示例中,我们将深入探讨如何利用Netty实现多客户端连接并进行通信,具体以创建一个简单的聊天室群聊功能为例。...
随着物联网的发展,随之出现了各种传感器监测数据的实时发送,需要和netty服务器通讯,netty和传感器之间需要保持长连接(换句话说,netty和gateway之间都会主动给对方发送消息) 碰到的问题: netty作为服务器端如何...
Websocket是一种在客户端和服务器之间建立长连接的协议,它为双向通信提供了低延迟、高效的数据传输方式。在IT行业中,特别是在实时应用如在线游戏、股票交易、聊天应用等领域,Websocket的应用非常广泛。Netty,一...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 实现客户端与服务器之间的通信。 首先,我们要理解 Netty 的核心...
综上所述,"java应用netty服务端和客户端"的示例涵盖了Netty框架的基本使用,包括服务器和客户端的启动、连接、数据传输以及模型对象的一致性。理解并掌握这些知识点对于构建基于Java的高性能网络应用至关重要。在...
在这个“netty3 客户端 服务端聊天”的示例中,我们将探讨如何使用 Netty 3 实现客户端和服务端之间的长连接通信,以便进行实时的信息收发。 首先,Netty 的核心组件包括 Bootstrap(引导类)、Channel(通道)、...
Netty是Java领域的一款高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。它的核心设计理念是简化网络编程的复杂性,提供了一套强大且灵活的API,使得开发者能够专注于业务...
通过使用Netty,我们可以创建高效的TCP连接,处理大量并发连接,并实现MQTT协议的各种操作,如连接、订阅、发布和断开连接。 3. **构建MQTT客户端** 构建基于Netty的MQTT客户端涉及以下步骤: - 创建Netty的...
- 在服务器和客户端的通信中,必须正确处理各种异常情况,如连接断开、数据解析错误等,以确保系统的健壮性。 9. **数据解码与编码**: - 在Netty中,服务器和客户端需要有共同的数据编码规则,以便正确解析接收...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 实现Socket同步数据获取,同时涵盖心跳检测、客户端连接控制以及...
在 Netty 中,服务器称为 BossGroup,客户端连接称为 WorkerGroup,它们分别负责监听新的连接和处理已建立的连接。 **一、服务端实现** 1. 创建 ServerBootstrap:这是启动服务器的基础,可以通过设置参数来配置...
在分布式锁的实现中,Netty的长连接特性使得客户端与服务端之间的通信更为高效,减少了每次请求建立和断开连接的开销。通过自定义协议设计,可以将锁的获取、释放等操作以特定的格式封装在数据包中,便于在网络中...
2. **Netty服务器**:这部分代码实现了服务器端的逻辑,包括监听客户端连接、接收protobuf编码的消息、解析消息内容并进行相应的业务处理,如广播消息给其他在线用户。 3. **Netty客户端**:客户端代码负责与服务器...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在游戏服务器领域,Netty 的优势在于它的灵活性、可扩展性和高效的性能,使得它成为构建游戏服务器核心层的...
4. **心跳机制**:Netty 支持自定义心跳包,确保长连接的有效性,防止因网络延迟导致的连接断开。 5. **WebSocket 和 HTTP/2 支持**:Netty 提供了对 WebSocket 和 HTTP/2 协议的全面支持,方便构建 Web 服务和实时...