Live data from Hacker News

Ask HN: Best modern file transfer/synchronization protocol?

news.ycombinator.com

11–20 of 59 posts

Re: Ask HN: Best modern file transfer/synchronization protocol?

#11
post #7

I would probably start with rsync.

Thanks - is there a reference implementation for rsync that works on windows and iOS? My impression was it was more of a CLI tool for Linux/macOS.

For Windows: https://community.chocolatey.org/packages/rsync>

Re: Ask HN: Best modern file transfer/synchronization protocol?

#15
What are your latency and bandwidth requirements? How big are the files? If you are already looking past obvious TCP-based choices like HTTP and FTP, you might be interested in FASP/Aspera https://en.m.wikipedia.org/wiki/Fast_and_Secure_Protocol

Edit: I’ll leave it here just in case it is useful for others but it may or may not be embeddable into your app, especially on the phone.

Re: Ask HN: Best modern file transfer/synchronization protocol?

#16
post #14

Use HTTP. For fault tolerance, use resumeable downloads or resumeable uploads. There is work at the IETF on resumeable uploads right now: https://datatracker.ietf.org/doc/draft-ietf-httpbis-resumabl...

I've had terrible experiences downloading large files over HTTP. I'm not sure why, range requests don't seem to be reliable or well supported. Something like BitTorrent is much better for large files: it divides the large file into chunks and hashes each chunk, and by default the chunks are downloaded in random order. BitTorrent seems much more reliable than range requests.

Re: Ask HN: Best modern file transfer/synchronization protocol?

#19
I built something on top of the Syncthing API this week after using it on its own for years.

A local instance of Syncthing can behave as a robust sync tool + inotify API for applications consuming the files: https://docs.syncthing.net/rest/events-get.html#get-rest-eve...

i believe there's an embeddable golang library, but if you want something easy to use on android check in on syncthing-fork which lets you define more granular sync conditions including "just turn on 5 minutes every hour" https://github.com/Catfriend1/syncthing-android

Post reply on HN