我这个程序采用的是netty,此程序中有客户端和服务端。
程序思路:服务端接受消息后在利用客户端发给别的服务端。
出现问题:时不时会出现这个异常,也不知道是那报的异常,经过查资料此异常是由某一端断开,发生的连接异常 ,我的客户端做了断开重连 但是并没发现重连的log ,难道是上游的客户端断开,那我的服务端也不应该报异常啊。不是很清楚? 有知道的吗?或者提供解决思路。
客户端重连代码
@Componentpublic class BdspNettySocketClient { private Logger log = LoggerFactory.getLogger(BdspNettySocketClient.class); /** * 线程组 */ private NioEventLoopGroup eventExecutors; /** * 存放通道 BdspNettySocketClientInitializer中的通道为最新通道 */ public static final ConcurrentHashMap<String, Channel> mChannel = new ConcurrentHashMap<>(); /** * 启动netty客户端 */ @PostConstruct public void start() { //初始化信息 try { this.init(); } catch (Exception e) { log.error("启动 netty 客户端出现异常", e); } } /** * 当Bean在容器销毁之前,调用被@PreDestroy注解的方法 */ @PreDestroy public void destroy() { this.eventExecutors.shutdownGracefully(); } /** * 初始化nettyClient配置 */ private void init() { //每次都需要重置通道 if (mChannel.get("channel") != null) { mChannel.clear(); } this.eventExecutors = new NioEventLoopGroup(1); //配置客户端的各种信息 Bootstrap bootstrap = new Bootstrap(); //设置线程组 bootstrap.group(eventExecutors); //设置通道 此通道是异步非堵塞 bootstrap.channel(NioSocketChannel.class); bootstrap.option(ChannelOption.SO_KEEPALIVE, true); //初始化通道 其中在里面配置逻辑 bootstrap.handler(new BdspNettySocketClientInitializer()); //连接设备信息 log.info("netty client start!"); /** * 连接好的容器 */ ChannelFuture channelFuture = bootstrap.connect("", ); //这事防止客户端掉线 掉线后重连 channelFuture.addListener(new ConnectionListener()); } public void send(String msg) { try { mChannel.get("channel").writeAndFlush(Unpooled.copiedBuffer(msg, CharsetUtil.UTF_8)); /* System.out.println(mChannel.get("channel")); System.out.println(mChannel.get("channel")); channelFuture.channel().writeAndFlush(Unpooled.copiedBuffer(msg, CharsetUtil.UTF_8));*/ } catch (Exception e) { log.error(this.getClass().getName().concat(".send has error"), e); } } public void send(Object msg) { try { mChannel.get("channel").writeAndFlush(msg); } catch (Exception e) { log.error(this.getClass().getName().concat(".send has error"), e); } }}
断开后进入重连
@Componentpublic class ConnectionListener implements ChannelFutureListener { private BdspNettySocketClient bdspNettySocketClient = new BdspNettySocketClient(); /** * 处理第一次连接服务器是否成功的 * @param channelFuture the source {@link Future} which called this callback * @throws Exception */ @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { if (!channelFuture.isSuccess()) { final EventLoop loop = channelFuture.channel().eventLoop(); loop.schedule(new Runnable() { @Override public void run() { System.err.println("服务端链接不上,开始重连操作..."); bdspNettySocketClient.start( ); } }, 2L, TimeUnit.SECONDS); } else { System.err.println("服务端链接成功..."); } }}
这个应该是你的客户端断开连接了,客户端怎么做的断开重连,贴下代码看看
问题内容: 我正在开发一个从Web服务器下载数据的应用程序,一开始似乎没有任何问题,但是几天前我开始收到这种异常:javax.net.ssl.SSLException: Read error: ssl=0x7a6588: I/O error during system call, Connection reset by peer我不确定是什么原因引起的问题以及如何解决。这是整个LogCat消息:
我正在编写Android应用程序,从一个网站下载特定的文件(目前为20M字节),以供测试之用。我使用URLConnection和BufferedInputStream。 下载了几兆字节后,我收到对等体重置的IOException连接。 InputStream.Read()暂停了大约130秒,然后引发异常。 经过几次尝试,我注意到下载的字节是11,272,192或11,010,048,知道文件可以从
问题内容: 建立: selenium :3.141.0 的Python :3.6.7 heroku-stack :heroku-18 headless-chrome :安装了v71.0.3578.80 buildpack chromedriver :已安装v2.44.609551 buildpack 在heroku中使用selenium时出现此错误: 我用谷歌搜索,但是没有运气。错误发生在此代码的
问题内容: 大家好,我的课程在上面 我是jdbc的新手 请帮助我,我遇到运行时错误, java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 感谢您的任何建议 注意:我不知道如何将jar文件放入我的类路径并动态绑定它:S 问题答案: 您需要下载MySQL Connector / J 并将.jar文件添加到您的应用程序中 将jar文件添加到中(如
我们正在开发web应用程序,我们的tomcat服务器和mysql服务器运行在两个不同的服务器上,我们收到了错误 需要帮助来解决问题 已经尝试了这些链接的解决方案。 Hibernate会话无法打开事务 第一次登录:HTTP状态500 -请求处理失败;嵌套异常是org . spring framework . transaction . cannotcreatetransactionexception
我正在尝试让一个简单的主机/客户端传输工作。我遵循了一个教程,服务器正常运行,但当客户端尝试连接时,它返回“由对等端重置连接”我真的不知道错误在哪里。