-
netty4,异常断线的问题.15
我写了个消息转发程序,也加了心跳处理,1分钟没读写操作的用户自动被踢下线.
可是现在遇到一个问题,如A用户要发送消息给B用户,通过服务器中转,
服务器在接收到A的消息时,B用户实际已经断网了(我把B用户的网线拔掉了),
这时服务器既然是不知道的.ChannelFuture writeFuture = channel.write(msg); final Channel sendChannel = ctx.channel(); writeFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()){ sendChannel.write(JSONResult.getSuccess()); System.err.println("future.isSuccess()"); } if (future.isDone()){ sendChannel.write(JSONResult.getSuccess()); System.err.println("future.isDone()"); } if (future.isCancelled()){ sendChannel.write(JSONResult.getSuccess()); System.err.println("future.isCancelled()"); } } });
operationComplete都会返回成功..只有到了1分钟的时候,服务器才回把B用户踢下线.我要怎么才能在服务端判断B用户实际已经掉线了??
问题补充:谁来救救我啊~郁闷死了!
问题补充:难道netty过时没人用了?2012年11月12日 16:06
2个答案 按时间排序 按投票排序
-
采纳的答案
你这种情况属于正常的,没有问题。
客户端异常掉线,比如断开网线或者断电等情况下,客户端的channel对象不会自动关闭,所以才引入了心跳的机制,也就是服务器端通过监测在心跳期间内(1分钟)是否收到了客户端发过来的消息,来判断是否可以和客户端进行通信,如果没有收到任何消息,则视为客户端掉线。心跳机制就是为了解决你说的这个问题的。
不光是netty,所有基于socket的通信都有这个问题,因为客户端和服务端是基于消息的协议,只有客户端主动发出断开的消息给服务端,服务端才能明确知道客户端断开了连接,直接拔掉网线或者断电的情况下,属于底层的异常,客户端程序是根本监测不到的,即使你的客户端程序能够监测到,也没有用,因为此时网线已经被拔掉了,根本没法给服务端发送消息。所以服务端才引入了心跳机制来对应这种异常情况,相当于超时机制,超过规定时间没有接到消息,就视为客户端掉线了,以释放服务端的资源。
相当于两个人通话,对方突然把手机电池拔掉了,一点声音也没有,持续了1分钟,你这边肯定是不知道他那边出了什么状况,最后你肯定就挂机了,不可能傻等着,呵呵。
详细情况可以看一下下面的文章,里面有异常掉线的解释:
http://vanadiumlin.iteye.com/blog/1276757
2012年11月13日 06:21
相关推荐
3. **心跳检测与断线重连**:在长连接中,心跳机制用于检测连接是否存活,断线重连则是为了在网络异常时恢复连接。 4. **多线程模型**:了解如何配置和利用EventLoopGroup,以及如何在多线程环境下正确处理并发问题...
在本文中,我们将深入探讨 Netty 的断线重连机制和心跳机制,这两个特性对于维持稳定可靠的网络通信至关重要。 首先,让我们了解**断线重连机制**。在分布式系统中,网络连接可能会因为各种原因中断,如网络抖动、...
4. **断线重连** - **服务端断线检测**:如果服务端检测到某个连接已经失效,可以主动关闭该连接,同时清理相关的资源。 - **客户端断线检测**:客户端通常会监听 `WebSocketCloseStatus` 或 `IOException` 来发现...
4. **实时通信**:理解实时通信的基本原理,如心跳机制、断线重连等。 5. **前端交互**:虽然描述中没有明确提到前端,但实现聊天室通常会涉及HTML、CSS和JavaScript,尤其是WebSocket API的使用。 6. **项目结构**...
5. **强大的心跳和断线检测机制**:Netty可以轻松实现客户端和服务器之间的连接保持与异常处理。 Netty的主要组件: 1. **Bootstrap**:启动器,用于配置并启动服务器或客户端。 2. **ServerBootstrap**:服务器...
4. 客户端状态管理:跟踪在线用户,处理断线重连等情况。 5. 错误处理和异常恢复:确保服务的稳定性和可靠性。 在前端,HTML5 WebSocket 与Netty服务器交互时,需要注意兼容性问题,因为不是所有浏览器都支持...
5. Netty服务器同时负责处理用户断线重连,确保消息的可靠传输。 6. 接收端通过WebSocket监听服务器的消息,一旦有新消息,立即更新到前端界面。 通过这个项目,开发者可以学习到如何将Spring Boot、Spring MVC、...
- Socket.IO 自动处理心跳和断线重连机制,确保连接的稳定性和可靠性。 - 通过`SocketIOClient`对象,你可以向特定客户端发送消息,或者广播消息给所有连接的客户端。 6. **异常处理与日志**: - 示例代码中使用...
在分布式系统和网络编程中,保持连接的稳定性是至关重要的,因此"Netty 断线重连"成为了关键特性。下面将详细介绍如何使用Netty实现心跳检测以及断线后的自动重连功能。 1. **心跳机制** - 心跳包:在网络通信中,...
本文将深入探讨Netty中解决拆包粘包问题的策略,以及客户端断线重连的实现方式。 首先,我们需要理解什么是“拆包”和“粘包”。在TCP/IP通信中,由于TCP协议的流式传输特性,数据可能会被分片或者合并,这就可能...
6. **异常处理**: 设计适当的异常处理机制,例如重试、断线重连等,以增强系统稳定性。 在实际应用中,可能还需要考虑到安全性和性能优化问题。例如,使用加密协议保护通信数据的安全,或者采用更高效的NAT穿透算法...
3. **断线重连逻辑**:如果源码包含这部分,那么可能会看到一个逻辑处理单元,当检测到连接异常或超时时,启动重新连接的过程。这可能涉及到异常捕获、定时任务以及连接恢复的尝试。 4. **超时配置**:源码中可能有...
4. 连接管理和异常处理代码,确保正确建立和关闭连接。 在实际应用中,WebSocket 通信还需要考虑以下方面: - **安全性**:使用 SSL/TLS 对 WebSocket 连接进行加密,确保数据传输安全。 - **心跳机制**:保持连接...
8. **异常处理和心跳机制**:私协议栈还应该包含完善的错误处理机制,比如超时重传、断线重连和异常恢复。心跳机制可以检测网络连接的健康状态,防止因长时间无数据交换而导致的连接超时问题。 9. **安全性**:在...
在分布式系统中,心跳机制是保持连接活性和检测网络异常的关键技术。本篇文章将深入探讨如何在 Netty 中实现心跳机制。 ### 1. Netty 心跳概念 心跳机制在网络通信中扮演着重要角色,它通过定期发送小型数据包或无...
当客户端与服务器之间的连接由于网络问题或服务器故障等原因突然中断时,断线重连机制会自动尝试重新建立连接,以确保服务的连续性和稳定性。这一过程通常包括检测连接状态、发起重连请求和处理重连结果等步骤。 在...
- 日志记录是诊断问题的关键,Netty可以集成各种日志框架,方便追踪和排查问题。 这个基于Java Netty实现的多人联机游戏项目,不仅展示了Netty在网络编程中的强大功能,也为开发者提供了一个学习和实践的实例。...
4. **零拷贝技术**:Netty利用Java的DirectBuffer和FileChannel的transferTo方法实现了高效的数据传输,避免了不必要的内存拷贝。 5. **性能优化**:探讨如何通过调整配置、减少对象创建和提高并发性来优化Netty...
7. **服务器稳定性与容错**: Netty提供的心跳检测、断线重连以及异常处理机制,增强了服务器的稳定性和容错能力,这对于物联网系统来说至关重要,因为设备的不稳定性和网络的不连续性是常态。 8. **扩展性与模块化*...
- **异常处理**:Netty提供了一套完整的异常处理机制,包括ChannelInboundHandlerAdapter中的exceptionCaught方法。 - **日志系统**:集成日志框架如Log4j或SLF4J,记录运行过程中的关键信息和错误信息,便于调试...