Netty--粘包與分包
1 在Netty框架的使用過程中,會出現粘包和分包情況,主要是沒有一個穩定的資料結構,可以採用長度加資料的資料結構來避免這種情況。
如下例子:
/**
* 解碼器
*/
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel,
ChannelBuffer buffer) throws Exception {
// 讀到的是包頭
if (buffer.readableBytes() >= BASE_LENTH) {
// 記錄包頭開始的index
Integer beginReader = buffer.readerIndex();
while (true) {
if (buffer.readInt() == ConstantValue.FLAG) {
break;
}
}
// 模組號
short module = buffer.readShort();
// 命令號
short cmd = buffer.readShort();
// 長度
int dataLength = buffer.readInt();
// 判斷請求資料包資料是否到齊
if (buffer.readableBytes() < dataLength) {
// 還原讀指標,資料全部來後全部資料再次讀取。
buffer.readerIndex(beginReader);
// 等待資料來
return null;
}
byte[] data = new byte[dataLength];
buffer.readBytes(data);
Request request = new Request();
request.setModule(module);
request.setCmd(cmd);
request.setData(data);
// 繼續往下執行
return request;
}
return null;
}
相關文章
- socket的半包,粘包與分包的問題
- Socket 粘包和分包問題
- netty 解決粘包 和 分包的問題Netty
- Netty - 粘包與拆包Netty
- 25. Socket與粘包問題
- TCP 粘包拆包TCP
- Netty拾遺(七)——粘包與拆包問題Netty
- 粘包問題
- TCP粘包拆包問題TCP
- swoole 之 tcp 合包分包TCP
- TCP的粘包拆包技術TCP
- 粘包拆包及解決方案
- Go TCP 粘包問題GoTCP
- Netty 中的粘包和拆包Netty
- Netty--心跳Netty
- Netty如何解決粘包拆包?(二)Netty
- go語言處理TCP拆包/粘包GoTCP
- 詳說tcp粘包和半包TCP
- TCP 粘包 - 拆包問題及解決方案TCP
- Netty粘包&半包解決方案Netty
- Netty Protobuf處理粘包分析Netty
- 粘包問題原因和解決方法
- H5打包出APP,分包
- NIO框架之MINA原始碼解析(四):粘包與斷包處理及編碼與解碼框架原始碼
- TCP協議粘包問題詳解TCP協議
- java nio解決半包 粘包問題Java
- TCP通訊處理粘包詳解TCP
- Netty2:粘包/拆包問題與使用LineBasedFrameDecoder的解決方案Netty
- 分包基礎概念+使用分包
- java nio訊息半包、粘包解決方案Java
- GO語言手動處理TCP粘包GoTCP
- tcp中的粘包、半包的處理方法TCP
- 粘包問題、socketserver模組實現併發Server
- 計算機網路 - TCP粘包、拆包以及解決方案計算機網路TCP
- Netty中使用MessagePack時的TCP粘包問題與解決方案NettyTCP
- Netty解決粘包和拆包問題的四種方案Netty
- [ gev ] Go 語言優雅處理 TCP “粘包”GoTCP
- 資料接收中粘包及半包的處理