netty

 2. protobuf:編譯命令
3. netty(rocketmq閉源了):直接下載jar便可
  netty的byteBuf與原生byteBuffer對比: http://blog.csdn.net/zs_scofield/article/details/53100147 
  爲何選擇netty: https://zhuanlan.zhihu.com/p/26928023 
  a.簡單,健壯性,性能,擴展性強,衆多開源項目支持(如dubbo), 很好支持protobuf,支持大文件傳輸
4. 純nio通信步驟(繁瑣):
   a.建立ServerSocketChannel,配置非阻塞模式
   b.綁定監聽,配置TCP參數,錄入backlog大小等
   c.建立一個獨立的IO線程,用於輪詢多路複用器Selector
   d.建立Selector,將已建立的ServerSocketChannel註冊到Selector上,並設置監聽標識位SelectionKey.ACCEPT
   e.啓動IO線程,在循環體中執行Seclect.select()方法,輪訓就緒的通道
   f.當輪訓處處於就緒的通道時,須要判斷操做位,若是爲ACCEPT狀態,則說明新客戶端接入,執行accept方法接受新的客戶端
   g.設置新接入客戶端的一些參數,如非阻塞、並將其通道繼續註冊到Selector中,設置標識位等
   h.輪詢到通道操做位爲READ,則進行讀取操做等
5.Netty通信步驟(簡單):
   a.建立兩個Nio線程組,一個用於網絡事件處理(接受客戶端鏈接),另外一個進行網絡通信讀寫
   b.建立一個ServerBootstrap對象,配置netty對應初始化參數
   c.建立一個實際處理數據的類ChannelInitializer,進行初始化的準備工做,如數據的字符集等
   d.綁定端口,執行同步阻塞方法等待服務器啓動便可
   推薦網站:  http://ifeve.com/netty5-user-guide/  
6.tcp拆包黏包問題產生緣由:
   1.程序write寫入的字節大小大於套接字發送緩衝區的大小
   2.進行MSS大小的TCP分段
   3.以太網幀的payload大於MTU進行ip分片
 主流解決方案:
   1.消息定長(固定字節數),不夠空位補空格
   2.在包尾增長特殊字符進行分割(如回車)
   3.將消息分爲消息頭和消息體(相似報文),在消息頭中包含消息總長度的字段,而後進行業務邏輯處理 
   4.pojo也可
7. 數據通信場景分析:
   
   經過 ReadTimeoutHandler進行超時監測,下次鏈接經過新起線程再次進行鏈接
8.心跳檢測:在服務器集羣中會用來監測各節點是否存活
  
    客戶端Handler繼承ChannelHandlerAdapter,重寫channelActive()便可












相關文章
相關標籤/搜索