Use push mechanism instead of polling for syncing


#1

Current situation

The desktop client is polling the server every 30 seconds to see if there are changes which need to be synced.
Thinking about a big installation with thousands of clients this will put quite some load on the server for nothing (in case there are no changes to be synced)

Proposal

The desktop client can connect to a web socket. Web sockets have been designed for pushing events from the server to the client.
The server part can be designed as an optional component - in case the client cannot connect to the web socket (or the server is not advertising this via it's capabilities) it will fallback to the regular polling.

The web socket server will be an isolated server process which needs to run continuously.
(We have to analyse how this can be deployed in a scalable manner)

This stand alone web socket server will receive etag propagations as done in the owncloud server via existing hook mechanisms.

Work packages

  • [ ] build web socket support into the client
  • [ ] use web socket if advertised by the client
  • [ ] server advertises web socket support via the capability api
  • [ ] add etag propagation hook into owncloud core
  • [ ] build a app which pushes the hook event information to the web socket server
  • [ ] implement the web socket server - e.g. using http://socketo.me/

To analyse

  • [ ] how to scale a web socket server?
  • [ ] is there something with in apache/nginx we can leverage instead of using a manually started process

#2

Some thoughts where collected at the bugtracker: