How to handle Web3 Events safely? I have a DApp where I need to modify the behaviour based on the contract events received. Currently, for this purpose, I have a single web3 listener attached to my own running GETH(FAST node not a FULL node) node. But it does fail to catch events at times. Or sometimes the GETH node suffers from sync issues, thereby the processing of events is delayed further. What shall be the safe way to handle the contract events real time?

How does a DApp like Cryptokitties handle several events reliably at such a huge volume?
Do I need to run a full node if I want to do it on my own?
Do I need to rely on API's provided by Infura, Etherscan for improved reliability?