Трябва да прехвърля файлове бързо по интернет от Java сървър към C++ клиенти, където често много клиенти ще се нуждаят от едни и същи файлове. Гледах да кажем transferTo() в Java, което звучи като прилично оптимизирана функция за изпращане на файлове. Не съм сигурен обаче, когато използвам transferTo() как най-добре да получа това в C++ (т.е. дали това е просто прехвърляне на необработени данни, как да определя кога файлът е приключил от страна на клиента и т.н.). Имам нужда от това, за да работи както на Windows, така и на Linux. Освен това, освен transferTo(), ще има ли някакъв начин да бъдем по-ефективни, особено като се възползваме от факта, че много клиенти обикновено ще се нуждаят от едни и същи файлове? Не съм сигурен как да направя, да речем, мултикаст и т.н. Освен това използвам защита на ниво приложение, а не VPN, и на сървъра на Java криптиране с AES и използване на MAC цифрово подписване, така че също търся препоръка за библиотека между различни платформи за справяне с крипто от страна на C++ с минимална болка. Владея много добре C++, но нямам предишен опит с мрежово програмиране, така че, моля, вземете предвид предложенията. Благодаря.
Ефективно прехвърляне на файлове от Java сървър към множество C++ клиенти?
Отговори (4)
Вграден уеб сървър? http-трансферите са достатъчно ефективни за вас?
Най-простият Java уеб сървър с възможност за вграждане, който си спомням, че съм виждал, е http://acme.com/java/software/Acme.Serve.Serve.html. Ние използваме вграден Jetty 6 в производството по време на работа, но това изисква повече грес за лактите.
Ако вашите клиенти не знаят къде да намерят вашия уеб сървър на първо място, помислете за обявяване с помощта на Zeroconf. http://jmdns.sourceforge.net/
От съображения за мащабируемост предложението на Thorbjørns за използване на http изглежда като много добра идея, тъй като ще ви позволи лесно да настроите http проксита за кеширане, да използвате стандартни инструменти за балансиране на натоварването и т.н.
Ако искате да прехвърлите повече от просто петно от данни, може да искате да разгледате буферите на протокола на Google. Те позволяват много лесно и бързо кодиране/декодиране в края на java и c++.
Помислете за разделяне на файла и изпращане чрез UDP дейтаграма. C++ може да компилира отново, както го получава. Обмисляли ли сте внедряване/вграждане на съществуваща реализация на P2P протокол?
Ако имате нужда от ефективен трансфер към много клиенти, тогава вашето тясно място е сървърът.
За това, моля, погледнете bit-torrent протокола, тъй като той разпределя трансфера между клиентите.