-
Notifications
You must be signed in to change notification settings - Fork 1
Datenspeicherung
Marc Staebler edited this page Mar 24, 2026
·
3 revisions
UserApps bieten zwei Arten von persistentem Speicher: App-Speicher für globale Daten und User-Speicher für nutzerspezifische Daten. Beide überstehen App-Neustarts und Server-Reboots.
Der App-Speicher ist für Daten, die app-weit gelten (z.B. Konfigurationen, Spielstände, Statistiken).
var appPersistence = KnuddelsServer.getPersistence();Es gibt drei Datentypen: Strings, Numbers und Objects.
// Strings speichern und laden
appPersistence.setString('welcomeMessage', 'Willkommen im Channel!');
var msg = appPersistence.getString('welcomeMessage', 'Standardwert');
// Zahlen speichern und laden
appPersistence.setNumber('totalGames', 42);
var games = appPersistence.getNumber('totalGames', 0); // 0 ist der Standardwert
// Zahlen atomisch erhöhen
appPersistence.addNumber('totalGames', 1); // Erhöht um 1
// Objekte speichern und laden (werden als JSON serialisiert)
appPersistence.setObject('config', { maxPlayers: 10, roundTime: 60 });
var config = appPersistence.getObject('config', {});var alleStringKeys = appPersistence.getStringKeys();
var alleNumberKeys = appPersistence.getNumberKeys();
var alleObjectKeys = appPersistence.getObjectKeys();
// Mit Pattern filtern
var punkteKeys = appPersistence.getNumberKeys('punkte_*');appPersistence.deleteString('welcomeMessage');
appPersistence.deleteNumber('totalGames');
appPersistence.deleteObject('config');→ AppPersistence-Dokumentation
Jeder Nutzer hat einen eigenen Speicherbereich. Ideal für Punkte, Einstellungen, Spielfortschritt usw.
App.onUserJoined = function(user) {
var userPersistence = user.getPersistence();
// Zahlen
userPersistence.setNumber('points', 300);
var points = userPersistence.getNumber('points', 0);
// Strings
userPersistence.setString('favColor', 'blau');
var color = userPersistence.getString('favColor', 'rot');
// Objekte
userPersistence.setObject('inventory', { sword: 1, shield: 2 });
var inventory = userPersistence.getObject('inventory', {});
// Zahlen atomisch erhöhen
userPersistence.addNumber('points', 10);
};→ UserPersistence-Dokumentation
Für Ranglisten und Highscores kannst du die numerischen User-Persistence-Werte sortiert abfragen:
// Top 10 Nutzer nach Punkten
var bestUsers = UserPersistenceNumbers.getSortedEntries('points', {
ascending: false, // Höchste zuerst
count: 10
});
for (var i = 0; i < bestUsers.length; i++) {
var entry = bestUsers[i];
var user = entry.getUser();
var position = entry.getPosition(); // 1-basiert
var wert = entry.getValue();
KnuddelsServer.getDefaultLogger().info(
position + '. ' + user.getNick() + ': ' + wert + ' Punkte'
);
}
// Rang eines bestimmten Nutzers
var rank = UserPersistenceNumbers.getRank('points', user, {
ascending: false
});→ UserPersistenceNumbers-Dokumentation
// Servercode
// Punkte vergeben
function addPoints(user, amount) {
user.getPersistence().addNumber('points', amount);
}
// Highscore an den Client senden
App.onEventReceived = function(user, type, data, appContentSession) {
if (type === "getHighscore") {
var bestUsers = UserPersistenceNumbers.getSortedEntries('points', {
ascending: false,
count: 99
});
var highscore = [];
for (var u = 0; u < bestUsers.length; u++) {
var entry = bestUsers[u];
highscore.push({
uid: entry.getUser().getUserId(),
name: entry.getUser().getNick(),
pos: entry.getPosition(),
val: entry.getValue()
});
}
var yourRank = UserPersistenceNumbers.getRank('points', user, {
ascending: false
});
if (appContentSession) {
appContentSession.sendEvent('highscore', {
yourRank: yourRank,
highscore: highscore
});
}
}
};- Persistenzgröße: maximal 102.400 Zeichen pro Schlüssel
- Die Gesamtgröße der Datenbank ist begrenzt. Überprüfe mit
appPersistence.getDatabaseFileSize()undappPersistence.getDatabaseFileSizeLimit() - Speichere nur das Nötigste und räume alte Daten regelmäßig auf
- Persistence – Basis-Klasse
- AppPersistence – App-weiter Speicher
- UserPersistence – Nutzer-Speicher
- UserPersistenceNumbers – Sortierte Zahlenabfragen
- UserPersistenceStrings – String-Speicher
- UserPersistenceObjects – Objekt-Speicher
- Erste Schritte – Voraussetzungen, Einrichtung, deine erste App
-
Projektstruktur – Dateien, Ordner und
app.config - Dev-Server – Entwicklungsumgebung und Testen
-
App-Lifecycle und Hooks –
onAppStart,onUserJoinedund Co. -
Server-API Grundlagen –
KnuddelsServer,Channel,Logger - Client-Server-Kommunikation – Events zwischen Frontend und Backend
-
Benutzer und Nachrichten –
User,BotUser, Nachrichten senden - HTML-UI und AppContent – Popups, Overlays, Globale Apps-UI
-
Datenspeicherung –
AppPersistence,UserPersistence -
Knuddel und Zahlungen – Transfers, Käufe,
KnuddelAccount - Toplisten – Ranglisten und Highscores
- Globale Apps – Apps im "Apps & Spiele"-Menü
- Quests – Aufgaben für Nutzer
- Externe Server-Kommunikation – HTTP-Requests an externe APIs
- Tutorials – Übersicht aller Tutorials
- Tic-Tac-Toe – Multiplayer-Spiel mit Bestenliste
- Best Practices – Tipps, Limits und häufige Fehler
- FAQ – Häufig gestellte Fragen
- KCode-Formatierung – Nachrichten-Formatierung mit KCode