If you have the cheddar, you could go for a web-socket connection.
https://www.dfuse.io/en - EOS Canada
https://eospark.com/openapi
If not, demux is likely your best bet. For best results, you would want to host your own node or use an API endpoint that shares your need for consistent up time.
Demux isn't too difficult to implement and there are many examples out there. Basically in your app.js you specify an API endpoint that you would like to ping (the default interval is 250ms or 2 times each block).
Here's my app.js: https://github.com/NatPDeveloper/eos-chess/blob/master/app.js#L35
// DEMUX ACTION READER SETUP
const { NodeosActionReader } = require("demux-eos")
const MyActionHandler = require("./js/lib/demux-js/ActionHandler")
const { BaseActionWatcher } = require("demux")
const updaters = require("./js/lib/demux-js/updaters")
const effects = require("./js/lib/demux-js/effects")
// LOCAL
// const actionReader = new NodeosActionReader(
// "http://127.0.0.1:8888", // Locally hosted node needed for reasonable indexing speed
// 179000, // First actions relevant to this dapp happen at this block
// )
// JUNGLE TESTNET
const actionReader = new NodeosActionReader(
"https://jungle.eosn.io:443", // Locally hosted node needed for reasonable indexing speed
1196555, // First actions relevant to this dapp happens at this block
)
const actionHandler = new MyActionHandler(
updaters,
effects,
)
const actionWatcher = new BaseActionWatcher(
actionReader,
actionHandler,
250, // Poll at twice the block interval for less latency
)
actionWatcher.watch() // Start watch loop
From there you can specify in the updaters/effects js files which contract_name:action_name you want to listen for. Upon demux picking one of those off the chain, you can pull the block data then CRUD your DB of choice. MonsterEOS uses this as does my chess-eos dapp.
demux-js: https://github.com/EOSIO/demux-js
code example (updaters/effects): https://github.com/NatPDeveloper/eos-chess/tree/master/js/lib/demux-js
block one code example: https://github.com/EOSIO/demux-js/tree/develop/examples/eos-transfers
block one simple blog example: https://github.com/EOSIO/eosio-project-demux-example
If you get stuck, hit up the EOS Developers channel. There are some great people in there who will help: https://t.me/joinchat/Esi1OkPktgcFeJ3Lmlcrqg