Sto scrivendo un bot per Matrix usando Ruby che consente agli utenti di iscriversi ai feed RSS e quando un nuovo elemento compare nel feed che ottiene inviato alla stanza.
Il problema che ho riscontrato è come faccio a far sì che il programma sieda e attenda nuovi comandi da parte degli utenti mentre recuperi i feed ogni 2 minuti?
Alcune soluzioni che ho trovato potrebbero essere la ricerca di nuovi comandi e poi controllare se è il momento di recuperare i feed di nuovo. Questo potrebbe funzionare perché l'attesa di nuovi comandi da Matrix non è bloccante in quanto è possibile richiedere tutti i nuovi messaggi dall'ultima volta senza dover sedersi e aspettare che qualcosa entri. Questo però sembra un po 'hacky e non sono sicuro che sia il modo migliore per fare le cose.
Un'altra soluzione potrebbe essere quella di creare 2 programmi separati. Uno che ascolta i comandi degli utenti e un altro che viene eseguito da un cron job che invia nuovi messaggi alla room quando trova un nuovo elemento su rss. Questo sarebbe possibile perché Matrix non ha una connessione costante come IRC ma usa un'API HTTP per inviare e ricevere messaggi. Il problema che vedo con questo è la gestione di un database condiviso tra 2 programmi sembra troppo complesso e potrebbe causare problemi.
Un altro modo sarebbe il multithreading, ma non sono abbastanza pratico di come funzioni e il ruby non sembra supportarlo da quello che ho visto.
Quale sarebbe il modo migliore per gestirlo? Sono alcune delle cose che ho trovato con una buona soluzione?