2009-08-29 1 views
2

Среди FTP, HTTP, SSH и т. Д. И учитывая последовательное широкополосное подключение к Интернету, что является самым быстрым способом передачи файлов по сети?Передача файлов по сети

ответ

1

Среди этих 3, его HTTP. Эффективный акт «переноса файла» имеет одинаковую скорость, но:

FTP требует слишком много «разговора» для стабилизации сеанса и создает параллельные соединения для передачи данных, все это «разговор» занимает немного больше времени для начала передачи файлов. По этой же причине у вас могут возникнуть проблемы с брандмауэрами и маршрутизаторами из-за открытия FTP-портов, особенно если FTP-клиент не поддерживает «пассивный режим».

HTTP более объективен, вы подключаетесь, рассказываете, что хотите, и получаете его как ответ. Нет, бла-бла-бла.

SSH не является протоколом передачи. SSH означает «Secure Shell». Если вы имеете в виду SSL, это также не протокол передачи, его уровень безопасности, обычно используемый инкапсулирование HTTP-сессий.

Но, возможно, это не вопрос, из которого один быстрее, реальный вопрос: что вы хотите сделать? В зависимости от вашей проблемы ни один из них не может быть вариантом.

0

У вас есть контроль над конечными точками и любыми промежуточными брандмауэрами? FTP меньше брандмауэра, чем другие. Инструменты на базе SSH (sftp, scp) довольно хороши, но некоторые интернет-провайдеры, как известно, дросселируют или иным образом мешают зашифрованному трафику (Comcast, я смотрю на вас!) Рассматривали ли вы rsync? В моей работе это то, что мы используем для передачи огромных наборов данных по интернет-соединениям на большие расстояния.

1

Используйте Socket.SendFile(), если можете. Это самый простой способ получить файл из точки A в точку B. Не зная специфики того, что вы пытаетесь выполнить, очень сложно дать лучшую рекомендацию. FTP, вероятно, я бы использовал иначе, и System.Net имеет довольно приличный объект FtpClient, который вы можете использовать, и образцы документируют его достаточно хорошо. HTTP и FTP используют TCP, поэтому вы, вероятно, не увидите значительную разницу в скорости между ними, и HTTP обычно будет иметь заголовки с другим потенциальным поведением (попробуйте загрузить файл с Expect-100 Continue и никаких учетных данных на сервер, для которого требуется AUTH и посмотрите, что произойдет с вашими подключениями). С Socket.SendFile(), поскольку сокеты по протоколу agnostic по определению, вы можете отправить файл через UDP или TCP с тем же кодом, но я бы рекомендовал это, если вы отправляете через локальную сеть, где потеря пакетов практически равна 0 UDP через Интернет - не очень хорошая идея.