Coder Social home page Coder Social logo

Comments (4)

cwomack avatar cwomack commented on June 12, 2024 1

Hello, @luisenaguero and thank you for opening this issue. I'm going to mark this as a feature request at this point after reviewing this with the team internally.

The purpose of the exponential backoff is to avoid inundating infrastructure that's attempting to come back online. That could be AppSync or any piece of "network" between the client and AppSync. Regardless of the network, it's a "best practice" to back off to give the "thing that's down" or unavailable room to breath and come back online.

That said, exponential backoff should inherently retry a handful of times very quickly. If the network is still connecting, I would expect reconnect within seconds and retry to also succeed within a few seconds. If the network is "down", I'd similarly expect exponential backoff to at least be proportional to the time to recovery.

from amplify-js.

schutzelaars avatar schutzelaars commented on June 12, 2024

Our customers are experiencing the same issue where DataStore seems to be stuck syncing ('ready' not being emitted) on devices with very poor internet connections.

@luisenaguero could you share a code snippet of your workaround?

from amplify-js.

luisenaguero avatar luisenaguero commented on June 12, 2024

Hey, @schutzelaars !

What we ended up doing for now was to have the Reachability class to not only listen the online/offline events but also have it be subscribed to our own BroadcastChannel which receives a message based on a heartbeat we placed in a ServiceWorker that every so often makes a request to an url to verify the connectivity.

Reachability class

...
const broadcastChannel = new BroadcastChannel('CHANNEL_NAME');

return new Observable(observer => {
	observer.next({ online: globalObj.navigator.onLine });

	const notifyOnline = () => {
		observer.next({ online: true });
	};
	const notifyOffline = () => {
		observer.next({ online: false });
	};

        broadcastChannel.onmessage = (event) => {
           // checks the message
           // calls notifyOnline or notifyOffline accordingly 
        };

        return () => { 
           broadcastChannel.close();  
           ...

Service worker

...

const broadcastChannel = new BroadcastChannel('CHANNEL_NAME');

function simplifiedConnectivityChecker() {
  // pings url to verify
  broadcastChannel.postMessage(ONLINE/OFFLINE);
  ....
  // gap time
  simplifiedConnectivityChecker();
}
...

If the client has poor connection, either way this might not be completely accurate.
For this case we added like a timeout when pinging the url and if it takes longer than x secs, we considers it as if there's no connection.

Hope this helps.

from amplify-js.

schutzelaars avatar schutzelaars commented on June 12, 2024

Thanks!

In the near future, I'll also implement a connectivity checker. Did you encounter any gotchas when implementing the simplifiedConnectivityChecker function?

from amplify-js.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.