Sto cercando un sistema per la creazione di macchine a stati con transizioni temporizzate / pianificate e con eventi che si verificano periodicamente durante un determinato stato. Posso implementarlo da solo, sebbene ritenga che questo sia un requisito abbastanza comune che ci sarebbe una categoria di software per questo.
Non ho bisogno di una raccomandazione di libreria, venditore, ecc. Non so proprio come chiamare questa cosa, e quindi cosa google, perché non è un "cron" e non è t una "coda di messaggi". Non so se un tale strato lato server esiste attualmente, ma spero di trovare un'indicazione in un modo o nell'altro. Se questo tipo di domanda è motivo di voti bassi e voti stretti, indica decisamente questo, e magari indicami un altro SE o suggerisci miglioramenti.
L'applicazione che ho in mente è un sistema di eventi "a tempo" per videogiochi, come quelli che potresti vedere in un MMORPG (mostri periodici di mostri, ondate temporizzate, timer fallito, eventi programmati), o in un bot trivia ( timer per domande, tempo tra le domande, timer rotondo), ecc. Non sarà usato per simulazioni, fisica, ecc. quindi non lancerò eventi di granularità in tempo reale (sotto i secondi).
Il sistema che ho in mente sarebbe una sorta di sistema pub / sub e di schedulazione ibrido, che funziona interamente lato server. Sarebbe un po 'come un Javascript setTimeout
, tranne che con un meccanismo più affidabile, probabilmente con una risoluzione di 1 secondo e con la possibilità di passare esplicitamente i parametri quando si pianifica il timeout. Probabilmente avrebbe anche una sorta di monitoraggio globale per scopi operativi e forse avrebbe una sorta di supporto per il ridimensionamento su più sistemi.
Non so se avrò bisogno di lanciare il mio, o se ci sono più sistemi generici che fanno già ciò che voglio che facciano. Preferirei usare un sistema esistente se possibile. C'è una tecnologia server comune che è simile, ma non credo che faccia proprio il lavoro.
Il sistema che voglio funziona in modo simile a Cron, con queste eccezioni:
- Dovrebbe essere funzione callback / micro-process oriented piuttosto che shell-oriented.
- Le attività dovrebbero probabilmente essere eseguite in un pool di sottoprocessi delegato o in-process del daemon, piuttosto che generare un nuovo processo per attività.
- Dovrebbe avere una risoluzione di 1 secondo (o più piccola)
Anche il sistema che voglio funziona come un messaggio o una coda di attività, con queste eccezioni:
- Dovrebbe consentire attività periodiche (già possibile in alcune code, credo)
- Dovrebbe supportare l'esecuzione parallela per le attività pianificate per un determinato tick, piuttosto che eseguirle in sequenza da una coda
- Non dovrebbe aspettarsi che le attività siano di lunga esecuzione e non dovrebbero costruire la sua interfaccia per le attività di lunga durata
- Dovrebbe essere altrettanto semplice eseguire attività ricorrenti come attività singole, senza dover creare colla per attività concatenate
- Dovrei essere in grado di cancellare le attività pianificate facilmente e rapidamente
- La robustezza di preservare e garantire l'esecuzione delle attività non è una priorità rispetto al sovraccarico per task. La scalabilità verticale e orizzontale è molto più importante di preservare attentamente i dati (a questo livello)
- Le attività dovrebbero probabilmente essere in grado di condividere lo stato a un certo livello (in modo che l'IPC e la latenza / overhead di esecuzione delle attività siano ridotte al minimo)
- Se il sistema supporta il ridimensionamento orizzontale, dovrei essere in grado di assegnare un'affinità alle attività raggruppate in modo che vengano eseguite dallo stesso stato condiviso, anziché essere inviate a un operatore arbitrario in un pool
La mia piattaforma di programmazione preferita è python, ma con un sistema stand-alone in qualsiasi linguaggio che consente l'IPC lato server a bassa latenza su un protocollo standard, mi piacerebbe utilizzare il mio linguaggio server-side preferito. Mi andrebbe anche bene con un sistema che si integra in modo specifico con i più diffusi linguaggi lato server, dato che le mie implementazioni di compiti sono probabilmente una porzione piuttosto piccola del mio sistema più grande.
Avere una capacità integrata di inviare facoltativamente eventi ai client in uno stile push sarebbe anche bello, ma sicuramente non deve essere parte di questa libreria o livello.