Ich baue tatsächlich eine Chat-Anwendung, die aktuelle Benutzer zeigen muss, habe ich eine Spalte 'IsOnline' in db, deren Wert wechselt zwischen 1 und 0 als Benutzer an- oder abmeldet. Ich brauche eine Funktion, die api alle 15 Sekunden aufruft, um die aktuellsten Nutzer zu erreichen, die gerade online sind. Da ich Entity-Framework verwende, das Signalr und SQL-Abhängigkeit nicht unterstützt, habe ich beschlossen, diesen Weg zu gehen. Wie kann ich eine Methode haben, die alle 15 Sekunden in einem separaten Thread ausgeführt wird, um meine anderen Crud-Operationen nicht zu stören, solange ich Benutzer in Sitzung habe.Timer-Funktion für Chat-Anwendung
Antwort
Abruf nach 15 Sekunden ist keine gute Lösung, besonders wenn Ihr Anruf auf DB ist. Denken Sie über die Latenz bei diesem Ansatz nach. Ich denke, du musst nach einem anderen Ansatz suchen, anstatt db nach 15 Sekunden aufzurufen.
Wenn Sie online/offline überprüfen möchten, behalten Sie den Status im Speicher bei, anstatt in Db zu persistieren (nach 1 Stunde oder 2 Stunden bestehen bleiben, wenn Sie in DB behalten möchten).
Speicherstatus im Speicher, z. B. in memcached oder redis. Lassen Sie den Client alle 15 Sekunden eine Anfrage stellen. Der Online-Status ist vorübergehend, er muss nicht in der DB gespeichert werden.
Es ist schwierig, ausführlich zu beraten, da Sie die Architektur Ihrer App nicht beschrieben haben.
Im Allgemeinen ist eine effiziente Implementierung von Anwesenheitsmeldungen schwierig. Es kann einfacher sein, etwas von der Stange zu nehmen, anstatt es selbst zu entwickeln.
- 1. Anzeigen von Nachrichtenströmen in Visual Studio für signalR-Chatanwendung
- 2. Wie setze und setze ich die Timerfunktion?
- 3. Schließen Sie alle Browser-Instanzen auf einmal
- 4. JavaScript Timer Implementierung
- 5. Synchronisieren des Timers im Server im Knoten js?
- 6. Verwirrt über Garbage Collection und Ereignisse mit schwachen Referenzen in ActionScript 3
- 7. Scala für() vs für {}
- 8. für
- 9. Verbindungszeichenfolge für Informix für .NET
- 10. Mindestanforderungen für Unity für Android?
- 11. Gruppe für Monat für Anwesenheitsliste
- 12. Modul für OneSignal für Appcelerator
- 13. Vorschlag für Vorlagenbuch für C++?
- 14. Alternative für BtsMSITask für BizTalk
- 15. Konfiguration für Aktionskabel für PostgreSQL?
- 16. Elmah für WCF für Ausnahmebehandlung
- 17. Beispiel für den Domain-Namen für mailgun be für nodejs?
- 18. Einstellung für Ländereinstellung für Java-Überschreibung für bestimmtes Gebietsschema
- 19. Implementieren von Bedingungsvariablen für CRITICAL_SECTIONs für WinThreads für XP
- 20. Regex für Komma Formatierung für Dezimalstellen und Punkt für Tausende
- 21. Wie man Benutzeravatar auf openfire Benutzer einstellt smack api
- 22. Alternative für ‚in‘ Operator für verschachtelte Listen
- 23. Validierung für TextBox für ein Benutzerformular
- 24. Jeder Ersatz für Bugsense für ACRA
- 25. "für" Schleife in einem anderen "für" Schleife
- 26. Empfehlung für Bildschirm-Video-Capture für Demos
- 27. istream für die Kommandozeileneingabe für C++/Poco
- 28. Zeitbedingung für Überprüfer für GCM Zweck
- 29. Swift: Verschlüsselte Eingabe für UITextField für Kartendetails
- 30. Relativer Pfad für Asset-Funktion für Laravel
Unterschiedlicher Ansatz? wäre hilfreich, wenn Sie mich hier in eine Richtung weisen. –