Лучший способ переместить файлы различных размеров в медленной сети с помощью .net
-
23-09-2019 - |
Вопрос
Я строю удаленный клиент/сервер .NET, который будет передавать тысячи файлов различных размеров (от нескольких байтов до сотен MB), и я бы хотел отзыв о лучшем методе для достижения этого. Насколько я вижу, есть пара вариантов:
- Сериализуйте весь файл в мой удаленный объект и передавайте вообще одновременно, независимо от размера. Это, вероятно, было бы самым быстрым, но сбой во время передачи требует, чтобы весь файл был переведен в переводол, без возможности возобновить.
- Если размер файла больше, чем что-то маленькое (например, 4 КБ), разбейте его на куски 4 КБ и удалите их, повторно собрав на сервере. В дополнение к сложности этого, это медленнее из-за продолжающихся поездки в оба конца и подтверждения, хотя неудача какой-либо единой части не тратит много времени.
- Включая что -то вроде FTP или SFTP -сервера с моим приложением - клиент уведомит сервер, который начинает использовать удаленное, загрузите файл, а затем используйте удаленное, чтобы уведомить об завершении. Я хотел бы сдержать все в моем приложении, вместо того, чтобы требовать отдельной службы FTP, но я открыт для этой опции, если это необходимо.
- Используйте какой -то вид указанного TCP -соединения или WPF или какой -то другой метод передачи, который создан для обработки сбоев или способен выполнять какую -то контрольную точку/резюме.
- Какие -нибудь другие мне не хватает?
Какой самый гибкий/надежный метод передачи? Я не так обеспокоен скоростью, а больше о надежности - я хочу, чтобы файл двигался, даже если он медленно. Поскольку клиент и сервер будут многопоточными, я могу передавать несколько файлов одновременно, если подключение позволяет это.
Спасибо за ваш отзыв - я добавлю щедрость, чтобы получить некоторые рекомендации по поводу того, как люди выполнят это.
Решение
Биты (фон интеллектуальная служба передачи) является хорошим решением. Он имеет многолетний опыт встроенного в
Некоторые отправные точки
Другие советы
function identical(array) {
for(var i = 0; i < array.length - 1; i++) {
if(array[i] !== array[i+1]) {
return false;
}
}
return true;
}
. Это то, для чего представлен сам TCP и настраивается в течение десятилетий или жестких испытаний. Удабление создано для небольших вызовов RPC, а не больших передачи файлов. Вы должны просто использовать гнездо TCP для передачи данных и позволить протоколам нижнего уровня беспокоиться о задержке, окнах передачи, MTU и т. Д.