我構建了一個基於apache mina 2.0.4的tcp服務器,並在寫回客戶端時遇到了一些問題。Apache Mina - 多次寫入客戶端
我們有一些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毫秒睡眠,這是難以接受的。 有人看到我做錯了什麼?