Надежный и быстрый способ передачи больших файлов через Интернет
Я работаю с настройкой, включающей множество клиентских ПК и некоторых серверных машин. Мне нужно организовать надежный и быстрый способ передачи файлов между этими ПК, который будет инициирован приложениями С#, работающими на обоих. Любой клиент может отправлять/получать данные с любого сервера. Возможные варианты:
-
FTP - используйте FtpWebRequest или SOSFTP для загрузки файлов на FTP-сервер. Сервер проверяет наличие новых файлов в своей файловой системе и выполняет необходимые действия.
-
SCP - Безопасная передача файлов. Используется так же, как FTP, но повышает безопасность между машинами. Вероятно, медленнее FTP.
-
DropBox/Box.Net. Используйте онлайн-решение облачной памяти с библиотекой, такой как SharpBox. Может быть бесплатным/платным. Может быть менее безопасным, учитывая, что у указанной стороны есть ваши файлы.
-
UDP - используйте библиотеку, такую как EME или GoAnywhere для передачи данных с ПК на ПК непосредственно через UDP. Вероятно, быстрее, но, вероятно, более ненадежным, поскольку использует пользовательскую технологию.
Что вы рекомендуете?
Ответы
Ответ 1
У меня есть супер-предвзятое мнение, исходящее от компании, которая делает программное обеспечение для передачи файлов, поэтому я помещаю отказ от ответственности и центр, чтобы взять все, что я говорю, с солью.; -)
Если вы делитесь очень большими файлами с несколькими конечными точками, вам хорошо обслуживается одна из двух вещей:
- Решение MFT (управляемая передача файлов)
- Продукт или API, который использует протокол на основе протокола UDP
1 - Решения MFT обычно используют перенос на основе TCP (например, FTP) в качестве транспортного механизма, но обычно включают дополнительные механизмы надежности, не найденные в чистом TCP. Они также будут включать инструменты для планирования и организации передач между многими конечными точками. Насколько я знаю, нет никаких значительных решений MFT, которые доступны бесплатно или дешевле, но существует множество решений MFT корпоративного уровня там, где ожидаются затраты.
2 - В течение нескольких лет некоторые компании создали собственные механизмы контроля и надежности в протоколах, построенных поверх UDP. Создавая этот настраиваемый уровень, UDP (который не имеет собственной надежности) фактически становится БОЛЕЕ надежным и может иметь больше возможностей, чем перенос на основе TCP, когда он когда-либо имеет, в то время как на него не оказывают неблагоприятного влияния потери и задержки пакетов (читайте так: обычно много более высокая скорость передачи). Этот протокол не обязательно не зависит от MFT (он будет по своей природе иметь некоторые характеристики MFT, а поставщики могут испечь его в MFT-решении), но потенциально может использоваться для его необработанного протокола (через API) и без всех атрибутов пользовательского интерфейса традиционного "Решение MFT".
Там есть протоколы передачи файлов с открытым исходным кодом на основе UDP, такие как Tsunami или UDT. Они не особенно хорошо укомплектованы или богаты функциональностью (некоторые из моих уклонений!), И, насколько я знаю, ни одна из них не имеет родной библиотеки С#. Однако в том же примечании ни одно коммерческое предложение, о котором я знаю, не имеет собственной библиотеки С#, хотя доступны обертки.
Если виды перечислений, которые вы описываете, будут регулярной и постоянной частью повседневной деятельности организации, мне трудно рекомендовать что-либо помимо того, о чем я упоминал выше. И чтобы сделать это "правильно" (или, по крайней мере, без нетривиального проекта разработки), вам, вероятно, понадобится коммерческое решение.
Ответ 2
Мне было интересно, что здесь упоминается GoAnywhere. Он считается решением MFT. Я использовал MFT несколько лет и нашел, что это очень эффективно в том, что вы здесь описываете, не имея необходимости писать код С#. Это не бесплатно, но я думаю, что это стоит того.
Он позволяет вам автоматизировать и запланировать различные протоколы передачи, такие как FTP, SFTP, FTPS, PGP, HTTPS, а также через сетевые подключения к нескольким общим компьютерам и серверам. MFT также позволяет мне работать над форматированием изменений, если мне нужно массировать данные для работы с различными приложениями. Запускайте запросы, чтобы извлекать только нужные мне данные из разных источников данных. Он также регистрирует все транзакции, чтобы я мог проверить, что он отправил файлы, и может быть настроен на оповещение меня по электронной почте, если есть какие-либо ошибки. Я нашел, что это идеальный инструмент для всех моих требований к передаче данных.
Я НЕ являюсь сотрудником любых программных компаний MFT, но очень счастливым клиентом, который любит продукт. Это намного облегчило мою трудовую жизнь. Там отличный пример того, как он помогает ИТ-специалисту здесь, http://blog.linomasoftware.com/2012/01/24/managed-file-transfer-changed-my-life/
Ответ 3
Вы можете использовать streaming функцию WCF
Ответ 4
Как я понимаю, что вы написали, данные передаются каждому клиенту в качестве сервера. Так почему бы не рассмотреть использование протокола torrent. Вот библиотека с открытым исходным кодом.
http://www.mono-project.com/MonoTorrent