Мне интересно написать приложение на Java, которое может автоматически синхронизировать файлы на моих устройствах (настольный компьютер, ноутбук, смартфон). Подобно Dropbox, но без стороннего сервера, потому что у меня есть свой собственный.
Поиск в сети. Я не нашел никаких полезных тем, рассказывающих об алгоритмах синхронизации, которые используются в таких программах. Я думаю, это не простая тема, учитывая тот факт, что эта проблема похожа на контроль версий. Из-за этого я думаю об отдыхе. Например. я (пока) не хочу реализовывать оптимизацию при передаче данных для изменений в файле, поэтому я могу передать весь файл, если он изменился. Также хорошо, если система попросит меня разрешить конфликты вручную между различными версиями файлов.
Моя самая большая проблема - сетевое общение. Как подчиненный клиент должен спрашивать / сообщать моему центральному серверу хранения об изменениях файлов? Я думаю, что не стоит периодически передавать весь список файлов с метаданными на сервер. Насколько я вижу, Dropbox проверяет всю общую папку при запуске, а затем как-то замечает изменения в локальной файловой системе (я знаю, что есть способ прослушивать события изменения файловой системы в ОС, например, в Java7 есть класс WatchService
для этого) а также слушать события синхронизации сети. Должен ли я сохранять версии файлов, как это делают системы контроля версий, или есть другие решения?
Существуют ли книги или онлайн-материалы на эту тему?