Эффективная передача файлов с сервера Java на несколько клиентов C ++? - PullRequest
2 голосов
/ 30 октября 2009

Мне нужно быстро передавать файлы через Интернет с сервера Java на клиенты C ++, где часто многим клиентам нужны одни и те же файлы. Я смотрел, скажем, TransferTo () в Java, который звучит так, как будто это была бы неплохо оптимизированная функция для отправки файлов. Однако я не уверен, когда использую TransferTo (), как наилучшим образом получить это в C ++ (т.е. это просто передача необработанных данных, как определить, когда файл закончен на стороне клиента и т. Д.). Мне нужно, чтобы это работало как на Windows, так и на Linux. Кроме того, кроме TransferTo (), будет ли какой-то способ быть более эффективным, особенно если использовать тот факт, что многим клиентам обычно нужны одни и те же файлы? Я не уверен, как сделать многоадресную рассылку и т. Д. Кроме того, я использую безопасность на уровне приложений, а не VPN, и на сервере Java, шифрую с помощью AES и использую цифровую подпись MAC, поэтому я также ищу Рекомендация кроссплатформенной библиотеки для решения крипто на стороне C ++ с минимальными затратами. Я очень хорошо разбираюсь в C ++, но у меня нет опыта работы с сетевым программированием, поэтому, пожалуйста, подумайте о чем-нибудь еще. Спасибо.

Ответы [ 4 ]

2 голосов
/ 30 октября 2009

встроенный веб-сервер? http-переводы достаточно эффективны для вас?

Самый простой встраиваемый веб-сервер Java, который я помню, это http://acme.com/java/software/Acme.Serve.Serve.html. Мы используем встроенный Jetty 6 в работе на работе, но для этого требуется больше смазки.

Если ваши клиенты вообще не знают, где найти ваш веб-сервер, рассмотрите возможность объявления с помощью Zeroconf. http://jmdns.sourceforge.net/

1 голос
/ 30 октября 2009

По соображениям масштабируемости предложение Thorbjørns об использовании http выглядит очень хорошей идеей, поскольку позволяет легко настроить http-прокси для кэширования, использовать стандартные средства балансировки нагрузки и т.

Если вы хотите передавать больше, чем просто блок данных, вы можете взглянуть на буферы протокола googles. Они обеспечивают очень простое и быстрое кодирование / декодирование на концах java и c ++.

0 голосов
/ 30 октября 2009

Если вам нужен эффективный перевод для многих клиентов, то узким местом является сервер.

Для этого посмотрите протокол бит-торрента, который распределяет передачу между клиентами.

0 голосов
/ 30 октября 2009

Рассмотрим разбиение файла и отправку через дейтаграмму UDP. C ++ может перекомпилировать по мере его получения. Рассматривали ли вы реализацию / внедрение существующей реализации протокола P2P?

...