2.
protobuf:編譯命令
3. netty(rocketmq閉源了):直接下載jar便可
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.綁定端口,執行同步阻塞方法等待服務器啓動便可
6.tcp拆包黏包問題產生緣由:
1.程序write寫入的字節大小大於套接字發送緩衝區的大小
2.進行MSS大小的TCP分段
3.以太網幀的payload大於MTU進行ip分片
主流解決方案:
1.消息定長(固定字節數),不夠空位補空格
2.在包尾增長特殊字符進行分割(如回車)
3.將消息分爲消息頭和消息體(相似報文),在消息頭中包含消息總長度的字段,而後進行業務邏輯處理
4.pojo也可
7.
數據通信場景分析:
經過
ReadTimeoutHandler進行超時監測,下次鏈接經過新起線程再次進行鏈接
8.心跳檢測:在服務器集羣中會用來監測各節點是否存活
客戶端Handler繼承ChannelHandlerAdapter,重寫channelActive()便可