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) {}
|
try { socket.close() } catch (_: Exception) {}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
socket.tcpNoDelay = false
|
||||||
|
socket.sendBufferSize = 1048576
|
||||||
|
socket.receiveBufferSize = 1048576
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
val progressId = UUID.randomUUID().toString()
|
val progressId = UUID.randomUUID().toString()
|
||||||
var actualFile: File? = null
|
var actualFile: File? = null
|
||||||
@@ -90,8 +93,8 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
|
|||||||
try {
|
try {
|
||||||
socket.use { sock ->
|
socket.use { sock ->
|
||||||
sock.soTimeout = 60_000
|
sock.soTimeout = 60_000
|
||||||
val input = DataInputStream(sock.getInputStream())
|
val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144))
|
||||||
val output = DataOutputStream(sock.getOutputStream())
|
val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144))
|
||||||
|
|
||||||
val requestJson = input.readUTF()
|
val requestJson = input.readUTF()
|
||||||
val request = try {
|
val request = try {
|
||||||
@@ -135,7 +138,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
|
|||||||
updateIncoming(progress.copy(state = TransferState.TRANSFERRING))
|
updateIncoming(progress.copy(state = TransferState.TRANSFERRING))
|
||||||
|
|
||||||
file.outputStream().use { fos ->
|
file.outputStream().use { fos ->
|
||||||
val buffer = ByteArray(65536)
|
val buffer = ByteArray(262144)
|
||||||
var remaining = request.fileSize
|
var remaining = request.fileSize
|
||||||
while (remaining > 0) {
|
while (remaining > 0) {
|
||||||
val toRead = minOf(buffer.size.toLong(), remaining).toInt()
|
val toRead = minOf(buffer.size.toLong(), remaining).toInt()
|
||||||
@@ -220,12 +223,16 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
|
|||||||
|
|
||||||
val job = scope.launch {
|
val job = scope.launch {
|
||||||
try {
|
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
|
activeSockets[requestId] = socket
|
||||||
socket.use { sock ->
|
socket.use { sock ->
|
||||||
sock.soTimeout = 30_000
|
sock.soTimeout = 60_000
|
||||||
val input = DataInputStream(sock.getInputStream())
|
val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144))
|
||||||
val output = DataOutputStream(sock.getOutputStream())
|
val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144))
|
||||||
|
|
||||||
output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request))
|
output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request))
|
||||||
|
|
||||||
@@ -244,7 +251,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
|
|||||||
var bytesSent = 0L
|
var bytesSent = 0L
|
||||||
var lastProgressTime = System.currentTimeMillis()
|
var lastProgressTime = System.currentTimeMillis()
|
||||||
var lastProgressBytes = 0L
|
var lastProgressBytes = 0L
|
||||||
val buffer = ByteArray(65536)
|
val buffer = ByteArray(262144)
|
||||||
file.inputStream().use { fis ->
|
file.inputStream().use { fis ->
|
||||||
while (true) {
|
while (true) {
|
||||||
val read = fis.read(buffer)
|
val read = fis.read(buffer)
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ class DesktopFileTransferManager : TransferManager {
|
|||||||
try { socket.close() } catch (_: Exception) {}
|
try { socket.close() } catch (_: Exception) {}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
socket.tcpNoDelay = false
|
||||||
|
socket.sendBufferSize = 1048576
|
||||||
|
socket.receiveBufferSize = 1048576
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
val progressId = UUID.randomUUID().toString()
|
val progressId = UUID.randomUUID().toString()
|
||||||
var actualFile: File? = null
|
var actualFile: File? = null
|
||||||
@@ -132,7 +135,7 @@ class DesktopFileTransferManager : TransferManager {
|
|||||||
updateIncoming(progress.copy(state = TransferState.TRANSFERRING))
|
updateIncoming(progress.copy(state = TransferState.TRANSFERRING))
|
||||||
|
|
||||||
file.outputStream().use { fos ->
|
file.outputStream().use { fos ->
|
||||||
val buffer = ByteArray(65536)
|
val buffer = ByteArray(262144)
|
||||||
var remaining = request.fileSize
|
var remaining = request.fileSize
|
||||||
while (remaining > 0) {
|
while (remaining > 0) {
|
||||||
val toRead = minOf(buffer.size.toLong(), remaining).toInt()
|
val toRead = minOf(buffer.size.toLong(), remaining).toInt()
|
||||||
@@ -218,12 +221,16 @@ class DesktopFileTransferManager : TransferManager {
|
|||||||
|
|
||||||
val job = scope.launch {
|
val job = scope.launch {
|
||||||
try {
|
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
|
activeSockets[requestId] = socket
|
||||||
socket.use { sock ->
|
socket.use { sock ->
|
||||||
sock.soTimeout = 30_000
|
sock.soTimeout = 60_000
|
||||||
val input = DataInputStream(sock.getInputStream())
|
val input = DataInputStream(BufferedInputStream(sock.getInputStream(), 262144))
|
||||||
val output = DataOutputStream(sock.getOutputStream())
|
val output = DataOutputStream(BufferedOutputStream(sock.getOutputStream(), 262144))
|
||||||
|
|
||||||
output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request))
|
output.writeUTF(Json.encodeToString(TransferRequest.serializer(), request))
|
||||||
|
|
||||||
@@ -246,7 +253,7 @@ class DesktopFileTransferManager : TransferManager {
|
|||||||
var bytesSent = 0L
|
var bytesSent = 0L
|
||||||
var lastProgressTime = System.currentTimeMillis()
|
var lastProgressTime = System.currentTimeMillis()
|
||||||
var lastProgressBytes = 0L
|
var lastProgressBytes = 0L
|
||||||
val buffer = ByteArray(65536)
|
val buffer = ByteArray(262144)
|
||||||
file.inputStream().use { fis ->
|
file.inputStream().use { fis ->
|
||||||
while (true) {
|
while (true) {
|
||||||
val read = fis.read(buffer)
|
val read = fis.read(buffer)
|
||||||
|
|||||||
Reference in New Issue
Block a user