簡體   English   中英

Apache Mina-多次向客戶端小寫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM