Kommunikation zwischen Clients

Django, Flask, Bottle, WSGI, CGI…
Pitwheazle
User
Beiträge: 987
Registriert: Sonntag 19. September 2021, 09:40

grubenfox hat geschrieben: Freitag 25. Oktober 2024, 22:07 ...
Das ist ja beides die gleiche Idee. Ein Server mit dem Clients sprechen. Oder welche Idee ist hier als zweites gemeint? Ich dachte die Anwendung läuft schon irgendwo auf einem Server (der im Internet steht... war da nicht mal was mit Uberspace?)
Ja, mein Rechentrainer läuft auf uberspace (1150 Nutzer und über 300 000 gerechnete Aufgaben). Mit einer App meinte ich eine zusätzliche App, die man im Appstore runterlädt und die für das Duell auf meinen Server zugreift. Ich habe ja schon darauf hingewiesen, dass ich gerne mehr Nutzer finden möchte und hätte gedacht, dass man mein Projekt so vielleicht häufiger findet.
grubenfox hat geschrieben: Freitag 25. Oktober 2024, 22:07 Jepp, "Websockets" wäre wohl ein gutes Stichwort... (wie bei einem Chat) siehe
viewtopic.php?p=425644#p425644
viewtopic.php?p=425639#p425639
Ja, das sieht richtig gut aus. Vielen Dank für den Hinweis!
Die Links hatte ich auch schon mal aufgemacht. Die haben mich aber überfordert. Jetzt habe ich mal "websocket und Django" gegoogelt und Beispiel und Erklärungen gefunden, die ich besser verstehe.
Das Prinzip habe ich also verstanden. Ich habe auch Beispiel für Code gefunden, wie man so ein Projekt erstellt. Ich werde aber sicher Problem bekommen, das in mein bestehendes Projekt einzufügen. Kann ich mir das so vorstellen, dass ich mittels eines URL Pfades diesee bidirektionale Kommunikation innerhalb meines Projektes starte und bei der die bisher nutzten Kommunikation dieses websocket nicht genutzt wird?
Ich bin zurzeit auf dem Rückweg aus Griechenland, werde mich dann aber gleich mal dran versuchen. Ich habe nur etwas Angst, dass ich bei der Installation irgendwas kaputtmache, was bisher schon funktioniert.
DeaD_EyE hat geschrieben: Samstag 26. Oktober 2024, 15:11
noisefloor hat geschrieben: Mittwoch 3. Juli 2024, 17:54 das Problem hierbei ist die Latenz, wenn du das online machst. Sagen wir mal, es gehen wirklich an beide Clients die Aufgabe gleichzeitig raus - dann heißt das nicht, dass die gleichzeitig ankommen. Du hast ja eine Netzwerklatenz, auf die du null Einfluss hast. Die kann halt gering sein oder erheblich. Also das beide gleichzeitig die Aufgabe gleichzeitig sehen und gleichzeitig antworten (können) ist extrem unwahrscheinlich
Wenn es ein Multiplayer-Spiel wäre, könnte ich die Bedenken noch nachvollziehen, denn da merkt man das sofort. Bei einer Rechentrainer-App kommt es sicherlich nicht auf 100 ms an.
Nun das mit der Latenz hatte wir ja schon, daher habe ich mein Duell ja auch so gestaltet, dass die Aufgaben per Beamer projeziert werden und die "Duellanten" ihre Lösungen reinrufen. Die Nutzer finden das gut so. Ich habe aber ein JavaScript integriert, das dafür sorgt, dass zuerst die Aufgabe angezeigt wird und die Namen der beiden "Duellanten" erst nach kurzer Zeit angezeigt werden um dafür zu sorgen, dass alle im Raum schon mal rechnen. Dieses Script würde ich verwenden um die Zeit zu messen, wie viel Zeit vergeht die auf den einzelnen Clients für eine richtige Antwort benötigt wurde und diese für jeweils 10 Aufgaben addieren (wie oben beschrieben). Ich gehe davon aus, dass damit die Latenz keine Rolle spielt.
Danke schonmal für eure Hilfe!
Benutzeravatar
noisefloor
User
Beiträge: 3956
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

heißer Tipp für dich: nimm' Channels. Das kommt von den Django direkt von den Django Entwicklern. In der Doku von Channels gibt es auch ein Tutorial.
Ich habe nur etwas Angst, dass ich bei der Installation irgendwas kaputtmache, was bisher schon funktioniert.
Die asynchrone Kommunikation ist auch nix, was man mal eben so nebenbei implementiert. Du brauchst z.B. auch eine Applikationsserver, der das unterstützt. Django Channels nutzt Daphne als ASGI Server. Sowohl Daphne als auch ASGI kommt von den Django Entwicklern.

Und um direkt Missverständnissen vorzubeugen: ich selber habe keine relevante Praxiserfahrung mit Django Channels und Daphne.

Gruß, noisefloor
Benutzeravatar
grubenfox
User
Beiträge: 548
Registriert: Freitag 2. Dezember 2022, 15:49

Pitwheazle hat geschrieben: Samstag 26. Oktober 2024, 17:40 Ja, mein Rechentrainer läuft auf uberspace (1150 Nutzer und über 300 000 gerechnete Aufgaben). Mit einer App meinte ich eine zusätzliche App, die man im Appstore runterlädt und die für das Duell auf meinen Server zugreift. Ich habe ja schon darauf hingewiesen, dass ich gerne mehr Nutzer finden möchte und hätte gedacht, dass man mein Projekt so vielleicht häufiger findet.
Aha, den Gedankengang kann ich zwar nachvollziehen, aber beim Thema App und Appstore bin ich völlig raus... da müssen diejenigen ran die sich mit so etwas auskennen.
Pitwheazle
User
Beiträge: 987
Registriert: Sonntag 19. September 2021, 09:40

So, ich habe viel rumprobiert und Hilfe gefunden: https://www.saaspegasus.com/guides/djan ... nels-htmx/. Es ist nicht so, dass ich das alles verstanden habe, aber zumindest einen Teil. Ich habe hoffentlich in der Zwischenzeit auch alle Bibliotheken installiert und eingebunden. Den Code kann man sogar bei Github runterladen. Es haben aber immer wieder irgendwelche Teile gefehlt, die ich hier lokal nachladen musste, es werden jetzt auch, soweit ich das sehe, keine fehlenden Bezüge mehr aufgezeigt, bis auf den asgi.py Code. Beim Starten des Servers bekomme ich den Fehler

Code: Alles auswählen

CommandError: You have not set ASGI_APPLICATION, which is needed to run the server.
und im Code wird bei

Code: Alles auswählen

http": django_asgi_app,
ein Fehler (mit Wellenlinie unterlegt) angezeigt. Der ganze Code:

Code: Alles auswählen

import os

from django.core.asgi import get_asgi_application
from pegasus_chat_demo.routing import websocket_urlpatterns

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application
from django.urls import path

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chat_demo.settings')

application = ProtocolTypeRouter(
    {
        "http": django_asgi_app,
        "websocket": AllowedHostsOriginValidator(
            AuthMiddlewareStack(
                URLRouter(
                    websocket_urlpatterns,
                )
            )
        ),
    }
)
... da ich hier nicht wirklich die Zusammenhänge verstanden habe, bräuchte ich da Hilfe.

Noch ein Nachtrag:
In dem beschriebenen Code wird ein Chat mit OpenAI erstellt. Da fällt mir zwar auch was ein, was ich später mal mit meinem Physiktrainer nutzen könnte, aber mir geht es ja eigentlich um ein Rechenduell. Hier wird eine eine Verbindung zwischen dem Server und einem Nutzer hergestellt, ich bräuchte ja aber eine Verbindung mit zwei oder auch mehr Nutzern - bin ich da auf dem falschen Weg?
Antworten