[英]Apache Mina - Multiple small write to client
我基於apache mina 2.0.4構建了一個TCP服務器,並且在寫回客戶端時遇到了一些問題。
我們有一些tcp客戶端,一次只能處理一條消息,最大緩沖區大小為256字節。 當我向客戶端發送2+條消息(<256字節)時,它們到達客戶端無法處理的一兩個大塊,而不是2+條分開的消息。 我試圖設置sessionConfig.setTcpNoDelay(true/false);
沒有成功,還有sessionConfig.setSendBufferSize( 256 );
。
在消息響應編碼器中,我還嘗試刷新輸出:
int capacity = 256;
IoBuffer buffer = IoBuffer.allocate(capacity, false);
buffer.setAutoExpand(false);
buffer.setAutoShrink(true);
buffer.putShort(type);
buffer.putShort(length);
buffer.put(gmtpMsg.getMessage().getBytes());
buffer.flip();
out.write(buffer);
out.flush();
在負責發送消息的線程中,我試圖等待消息被寫入
for (Entry<Long, OutgoingMessage> outgoingMsg : outgoingMsgs.entrySet()) {
WriteFuture future = session.write(outgoingMsg.getValue());
future.awaitUninterruptibly();
}
所有這些都不幸地失敗了,唯一可行的解決方案是會話寫入之間的500 ms荒謬的睡眠,這幾乎是不能接受的。 有人看到我在做什么錯嗎?
在閱讀了更多關於tcp協議的信息,特別是https://stackoverflow.com/a/6614586/1280034之后 ,很明顯問題出在客戶端,而不是正確處理數據包。
由於我們無法重建客戶端,因此我唯一的解決方案是將每個傳出消息延遲大約500毫秒。 為此,我創建了一個額外的隊列,負責寫給客戶端,以使服務器繼續其正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.