1. 程式人生 > >Netty 之 Netty簡單的重連機制

Netty 之 Netty簡單的重連機制

其實重連機制並不是多麼多高深的技術,其實就是一個在客戶端做一個簡單的判斷,如果連線斷了,那麼就重新呼叫連線服務端的程式碼

當然,我們重連的動作肯定是發生在斷連之後發生的,我們可以在上篇的心跳機制的基礎上,簡單地修改一下客戶端的啟動程式碼就可以了:

我們在連線斷了之後,我們一般會在finally的方法中去釋放資源,這邊我們應該不去釋放資源,我們在finally裡面進行重連:


整個客戶端的程式碼如下:

  1. package com.lyncc.netty.heartbeats;  
  2. import java.util.concurrent.TimeUnit;  
  3. import io.netty.bootstrap.Bootstrap;  
  4. import io.netty.channel.ChannelFuture;  
  5. import io.netty.channel.ChannelInitializer;  
  6. import io.netty.channel.ChannelOption;  
  7. import io.netty.channel.ChannelPipeline;  
  8. import io.netty.channel.EventLoopGroup;  
  9. import io.netty.channel.nio.NioEventLoopGroup;  
  10. import io.netty.channel.socket.SocketChannel;  
  11. import io.netty.channel.socket.nio.NioSocketChannel;  
  12. import io.netty.handler.codec.string.StringDecoder;  
  13. import io.netty.handler.codec.string.StringEncoder;  
  14. import io.netty.handler.logging.LogLevel;  
  15. import io.netty.handler.logging.LoggingHandler;  
  16. import io.netty.handler.timeout.IdleStateHandler;  
  17. publicclass HeartBeatsClient {  
  18.     publicvoid connect(int port, String host) throws Exception {  
  19.      // Configure the client.
  20.         EventLoopGroup group = new NioEventLoopGroup();  
  21.         ChannelFuture future = null;  
  22.         try {  
  23.             Bootstrap b = new Bootstrap();  
  24.             b.group(group)  
  25.              .channel(NioSocketChannel.class)  
  26.              .option(ChannelOption.TCP_NODELAY, true)  
  27.              .handler(new LoggingHandler(LogLevel.INFO))  
  28.              .handler(new ChannelInitializer<SocketChannel>() {  
  29.                  @Override
  30.                  publicvoid initChannel(SocketChannel ch) throws Exception {  
  31.                      ChannelPipeline p = ch.pipeline();  
  32.                      p.addLast("ping"new IdleStateHandler(040, TimeUnit.SECONDS));  
  33.                      p.addLast("decoder"new StringDecoder());  
  34.                      p.addLast("encoder"new StringEncoder());  
  35.                      p.addLast(new HeartBeatClientHandler());  
  36.                  }  
  37.              });  
  38.             future = b.connect(host, port).sync();  
  39.             future.channel().closeFuture().sync();  
  40.         } finally {  
  41. //          group.shutdownGracefully();
  42.           if (null != future) {  
  43.               if (future.channel() != null && future.channel().isOpen()) {  
  44.                   future.channel().close();  
  45.               }  
  46.           }  
  47.           System.out.println("準備重連");  
  48.           connect(port, host);  
  49.           System.out.println("重連成功");  
  50.         }  
  51.     }  
  52.     /** 
  53.      * @param args 
  54.      * @throws Exception 
  55.      */
  56.     publicstaticvoid main(String[] args) throws Exception {  
  57.         int port = 8080;  
  58.         if (args != null && args.length > 0) {  
  59.             try {  
  60.                 port = Integer.valueOf(args[0]);  
  61.             } catch (NumberFormatException e) {  
  62.                 // 採用預設值
  63.             }  
  64.         }  
  65.         new HeartBeatsClient().connect(port, "127.0.0.1");  
  66.     }  
  67. }  
我們再看看伺服器端和客戶端啟動之後的控制檯列印資訊:

伺服器控制檯:

客戶端:

好了,這樣就可以重連~這只是一個簡單的Demo,真實的生產場景用法可能並不是這樣的

相關推薦

Netty Netty簡單機制

其實重連機制並不是多麼多高深的技術,其實就是一個在客戶端做一個簡單的判斷,如果連線斷了,那麼就重新呼叫連線服務端的程式碼 當然,我們重連的動作肯定是發生在斷連之後發生的,我們可以在上篇的心跳機制的基礎上,簡單地修改一下客戶端的啟動程式碼就可以了: 我們在連線斷了之

Netty Netty生產級的心跳和機制

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

一起學Netty(十四) Netty生產級的心跳和機制

sigh,寫這篇部落格的時候老臉還是紅了一下,心裡還是有些唏噓的,應該算是剽竊吧,每個人的程式碼功力的確是有差距的,好在文章的標題是“一起學”,而不是開濤大神的“跟我學”系列的文章,我們還是多花點時間學習吧,感嘆無用~ 最近工作比較忙,但閒暇之餘還是看了阿里的馮家春(fe

簡易RPC框架-心跳與機制

依賴 tile tegra port public row edi cat ice 心跳 就是告訴其它人自己還活著。在簡易RPC框架中,采用的是TCP長連接,為了確保長連接有效,就需要客戶端與服務端之間有一種通知機制告知對方的存活狀態。 如何實現 客戶端發

Zookeeper 機制

static proc public ssi byte[] rgs long zookeeper 10.10 Zookeeper 重連機制 public class ZKConnectSessionWatcher implements Watcher {

ActiveMQ的斷線機制

primary active 節點 語法 無限 機制 新的 bubuko 獲取 斷線重連機制是ActiveMQ的高可用性具體體現之一。ActiveMQ提供failover機制去實現斷線重連的高可用性,可以使得連接斷開之後,不斷的重試連接到一個或多個brokerURL。 默認

002——NettyNetty介紹

Netty出現背景 Java NIO難用 據說存在bug 業界其他NIO框架不成熟 Netty主要解決兩個相應關注領域 (1)非同步和事件驅動的實現。 (2)一組設計模式,將應用邏輯與網路層解耦。 特性 統一API,適用於不同協議 基於靈活、可擴充套

多執行緒失敗自動機制

發現一個比較好玩的東西: 如果你在使用多執行緒的使用中異常結束了,你應該如何操作呢? 例子: 正常情況下: 專案一啟動都可以跑完,如果有一段程式碼出現錯誤呢。 系統丟出了一個異常出來。 有沒有發生過這樣的情況,你寫的工作執行緒莫名其妙的掛了,如果不是被你剛好看到,拿只能抓瞎了,不知道啥原因了,因為異常

理解WebSocket心跳及中斷機制

在使用websocket的過程中,有時候會遇到網路斷開的情況,但是在網路斷開的時候伺服器端並沒有觸發onclose的事件。這樣會有:伺服器會繼續向客戶端傳送多餘的連結,並且這些資料還會丟失。所以就需要一種機制來檢測客戶端和服務端是否處於正常的連結狀態。因此就有了websocket的心跳了。還

weblogic連線池機制不一定靠得住

ORA-27102: out of memoryLinux-x86_64 Error: 12: Cannot allocate memoryAdditional information: 26Additional information: 327684Additional information: -1610

即時通訊判斷網路狀態和斷線機制

本文借鑑csdn大神way的xmpp客戶端學習改造而來,不足之處希望大家多多指教!  1. 由於近半年來一直寫針對於tigase伺服器的即時通訊軟體的開發,框架的重構,對即時通訊的理解也較之前更進一步,在客戶端的IM開發中,最重要的除去通訊的建立,就是保持網路環境不斷更換時

【android學習】斷線機制

【解決問題】 android端連線網路之後,當網路斷開連線時,為了提高使用者體驗,android自動檢測網路,當有網路時,使用者無需進行多餘操作,android端自動重新連線網路。 【解決方案】 1、設定網路斷開連線標誌:NET_BAD 1)每次傳送資料,若傳送資料不成功,

Netty netty原始碼學習大話java NIO

沉澱了一個月安安心心地學習了家純大神的Jupiter(https://github.com/fengjiachun/Jupiter),感覺受益良多,感覺自己學習了這裡面的精華的50%,不是謙虛,而是無知,因為我不知道著裡面還有多少是我沒有理解的,也許我看懂了他的程式碼,但

Golang自玩專案中一個機制實現.

package tcp_listen type Connection interface { Read() (value interface{}, tag byte, err error)

js 請求異常或斷線後聯網機制(ajax)

    這個需求的應用場景是這樣的,在開發一個基於h5的移動app 時,在請求api 時出現請求的異常或者是請求中途網路中斷的情況,一旦出現問題則需要重新觸發某個點選事件或者開啟某個頁面。於是就想,遇到異常情況我們能不能讓請求自動重連,重新呼叫我們的資料。當然,一開始都是先看

Mina 斷線機制

Mina 斷線重連     定義:這裡討論的Mina 斷線重連是指使用mina作為客戶端軟體,連線其他提供Socket通訊服務的伺服器端。Socket伺服器可以是Mina提供的伺服器,也可以是C++提供的伺服器。      一、斷線重連的方式;     1.

關於c3p0的機制(轉載)

1)C3P0容錯和自動重連與以下配置引數有關:breakAfterAcquireFailure :true表示pool向資料庫請求連線失敗後標記整個pool為block並close,就算後端資料庫恢復正常也不進行重連,客戶端對pool的請求都拒絕掉。false表示不會標記 p

Netty netty原始碼學習netty server端原始碼初讀(下)

上一篇簡單的分析了一下NioEventLoop,ServerBootstrap等元件的建立過程做的一些操作 現在我們一起看下當SingleThreadEventExecutor.java中的thread啟動後,netty做的一些最最重要的一些操作 我們接著昨天的程

activeMQ 自動機制

在使用activeMQ的時候(沒有整合spring),發現當broker掛掉或者重啟的時候,consumer就會斷開,不會在次嘗試去接受訊息, (使用spring整合activeMQ)會解決這個問題. 如果說你不想使用spring,那麼接下來告訴你該怎麼辦. 在apache

細說websocket快速機制

## 引言 在一個完善的即時通訊應用中,websocket是極其關鍵的一環,它為web應用的客戶端和服務端提供了一種全雙工的通訊機制,但由於它本身以及其底層依賴的TCP連線的不穩定性,開發者不得不為其設計一套完整的保活、驗活、重連方案,才能在實際應用中保證應用的即時性和高可用性。就重連而言,其速度嚴重影響了