AeroToss: оптимизация скорости передачи
- Буферы увеличены: 64KB → 256KB (отправка + приём) - TCP_NODELAY = false (Nagle batching для высокой пропускной способности) - Socket buffer: 1MB send/receive - BufferedInputStream/BufferedOutputStream: 256KB - Таймаут увеличен до 60 сек для больших файлов
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user