Ich baue ein einfaches "Spiel gegen einen zufälligen Gegner" Back-End mit Goole App Engine. Bisher füge ich jeden Benutzer, der im Datastore in eine "Tabelle" spielen möchte, hinzu. Sobald mehr als ein Spieler im Datastore ist, kann ich mit dem Abgleich beginnen.Google App Engine - Cron oder Aufgabenwarteschlange?
Die Schedule Tasks with Cron sah vielversprechend für diese Arbeit, bis ich sah, dass die niedrigste Auflösung scheint genau zu sein. Wenn sich viele Spieler anmelden, möchte ich, dass sie schnell aufeinander abgestimmt sind und nicht eine ganze Minute warten müssen (schlimmster Fall).
Ich dachte über das Servlet, das die "Spiel gegen zufällige Gegner" Anfrage POST an eine Task-Warteschlange, die das Match Making würde, aber ich glaube, dies wird zu einer Menge Streit beim Lesen aus dem Datastore und Löschen führen die Einträge aus der "zufälligen" Tabelle, nachdem sie abgeglichen wurden?
Grundsätzlich möchte ich einen einzelnen Arbeiter, der das Matching tun wird, und ich möchte diesem Arbeiter von Zeit zu Zeit signalisieren, dass jetzt ist eine gute Zeit, um zu versuchen, Gegner zu entsprechen.
Irgendwelche Vorschläge, was hier die richtige Vorgehensweise wäre?
Ja, aber mit einer großen Menge an Verkehr wird dies wahrscheinlich zu einer Menge Streit führen. Ich kann nicht sehen, dass ich mehr als einen "Arbeiter" brauche, der das tatsächliche Matching macht. Ich weiß nicht, ob es möglich ist, einen einzelnen Arbeiter ohne Cron-Jobs zu erstellen. Cron hat die problematische Auflösung, obwohl ich nicht versucht habe, es auf "0,1 Minuten" zu setzen. – TommyN
Hauptproblem - es gibt keine "Arbeiter" in GAE (wie in laufenden Thread- und Ausführungsaufgaben). Der nächste, den Sie erhalten können, ist Task Queue. In Ihrem Fall Pull Queue. Siehe aktualisierte Antwort. –
Sie können hier auch ein Backend verwenden - es muss jedoch keine Konkurrenzsituation bestehen, solange jede ausstehende Spielanforderung in ihrer eigenen Entitätsgruppe ist. –