From f8b73312ba633fce5dcbcba3a85e5f5fbe5e8ece Mon Sep 17 00:00:00 2001 From: grendervill Date: Thu, 20 Aug 2026 12:06:46 +0300 Subject: [PATCH] =?UTF-8?q?AeroToss:=20=D0=BE=D0=BF=D1=82=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Буферы увеличены: 64KB → 256KB (отправка + приём) - TCP_NODELAY = false (Nagle batching для высокой пропускной способности) - Socket buffer: 1MB send/receive - BufferedInputStream/BufferedOutputStream: 256KB - Таймаут увеличен до 60 сек для больших файлов --- .../transfer/AndroidTransferManager.kt | 23 ++++++++++++------- .../transfer/DesktopTransferManager.kt | 19 ++++++++++----- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt b/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt index c1f60d9..3584e54 100644 --- a/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt +++ b/app/src/androidMain/kotlin/com/aerotoss/transfer/AndroidTransferManager.kt @@ -83,6 +83,9 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager try { socket.close() } catch (_: Exception) {} return } + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 withContext(Dispatchers.IO) { val progressId = UUID.randomUUID().toString() var actualFile: File? = null @@ -90,8 +93,8 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager try { socket.use { sock -> sock.soTimeout = 60_000 - val input = DataInputStream(sock.getInputStream()) - val output = DataOutputStream(sock.getOutputStream()) + val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144)) + val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144)) val requestJson = input.readUTF() val request = try { @@ -135,7 +138,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager updateIncoming(progress.copy(state = TransferState.TRANSFERRING)) file.outputStream().use { fos -> - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) var remaining = request.fileSize while (remaining > 0) { val toRead = minOf(buffer.size.toLong(), remaining).toInt() @@ -220,12 +223,16 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager val job = scope.launch { try { - val socket = Socket(targetHost, targetPort) + val socket = Socket() + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 + socket.connect(java.net.InetSocketAddress(targetHost, targetPort), 5000) activeSockets[requestId] = socket socket.use { sock -> - sock.soTimeout = 30_000 - val input = DataInputStream(sock.getInputStream()) - val output = DataOutputStream(sock.getOutputStream()) + sock.soTimeout = 60_000 + val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144)) + val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144)) output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request)) @@ -244,7 +251,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager var bytesSent = 0L var lastProgressTime = System.currentTimeMillis() var lastProgressBytes = 0L - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) file.inputStream().use { fis -> while (true) { val read = fis.read(buffer) diff --git a/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt b/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt index 47e4047..c9b4262 100644 --- a/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt +++ b/app/src/desktopMain/kotlin/com/aerotoss/transfer/DesktopTransferManager.kt @@ -80,6 +80,9 @@ class DesktopFileTransferManager : TransferManager { try { socket.close() } catch (_: Exception) {} return } + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 withContext(Dispatchers.IO) { val progressId = UUID.randomUUID().toString() var actualFile: File? = null @@ -132,7 +135,7 @@ class DesktopFileTransferManager : TransferManager { updateIncoming(progress.copy(state = TransferState.TRANSFERRING)) file.outputStream().use { fos -> - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) var remaining = request.fileSize while (remaining > 0) { val toRead = minOf(buffer.size.toLong(), remaining).toInt() @@ -218,12 +221,16 @@ class DesktopFileTransferManager : TransferManager { val job = scope.launch { try { - val socket = Socket(targetHost, targetPort) + val socket = Socket() + socket.tcpNoDelay = false + socket.sendBufferSize = 1048576 + socket.receiveBufferSize = 1048576 + socket.connect(java.net.InetSocketAddress(targetHost, targetPort), 5000) activeSockets[requestId] = socket socket.use { sock -> - sock.soTimeout = 30_000 - val input = DataInputStream(sock.getInputStream()) - val output = DataOutputStream(sock.getOutputStream()) + sock.soTimeout = 60_000 + val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144)) + val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144)) output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request)) @@ -246,7 +253,7 @@ class DesktopFileTransferManager : TransferManager { var bytesSent = 0L var lastProgressTime = System.currentTimeMillis() var lastProgressBytes = 0L - val buffer = ByteArray(65536) + val buffer = ByteArray(262144) file.inputStream().use { fis -> while (true) { val read = fis.read(buffer)