Javscript und Sockeds oder andere möglichst direkte Verbindung
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
aktualisierung
anforderung
beide spieler
beitrag
chat
client
datei
daten
datensatz
derweil
direktverbindung
einschrnkung
funktion
job
kriterium
lsung
mglichkeit
sprache
stichwort
vorteil
-
Hi
Da ich gerade dabei bin ein kleines Schachspiel mit Javascript zu erstellen, suche ich nach einer Möglichkeit direkt Daten zwischen zwei PC's auszutauschen. Dieser Datenaustausch sollte einerseits wenig Traffic kosten (ergo nur das Nötigste und nur zu bestimmten Zeiten senden) und so flexibel sein, dass man auf ankommende Nachrichten sofort reagieren kann, andererseits sollte die Verbindung auch möglichst schnell sein. (ohne allzu große Umwege)
Derweil besteht meine Verbindung aus einer MySQL-Datenbank mit Zugriff über PHP und aktualisierung durch in Iframes sich ständig wieder ladende Seiten. Eine, wie ich finde, sehr unsaubere Lösung. (Wenn auch noch nicht ganz fertig)
Wenn irgendwer eine andere Idee hat, wie ich eine Gute Verbindung erstellen könnte (Mein Versuch eine Session-Variable zu erstellen und von zwei verschiedenen PC's darauf zuzugreifen war leider nicht sehr erfolgreich) nur mit den Mitteln: HTML, PHP, MySQL und Javascript (kein Java-Applet!), der ist herzlich eingeladen sie hier zu posten!
mfg
PD
PS: Ich hab diesen Thread absichtlich in diesem Forum geposted, da ich nach Möglichkeiten suche, die sich nicht unbedingt auf eine Programmiersprache beziehen müssen. (ergo sind auch Mischlösungen erwünscht)
Beitrag geaendert: 23.3.2007 15:54:15 von pinkdragon -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Kleiner Tipp: Ajax
Wieso willst du eigentlich das Schachspiel in Javascript machen? -
Ajax ist schon mal n guter Tipp, werd ich mir genauer ansehen.
Warum gerade mit Javascript? PHP ist eh auch erlaubt :P Ne, es handelt sich um ein Schulprojekt und da sind die möglichkeiten leider sehr eingeschränkt. (Flash wäre sonst auch ne super Lösung gewesen...)
Aja: Geht Ajax mit jedem Browser oder gibt es da Einschränkungen? Und wie sieht es mit dem Server aus? Muss der irgendwas bestimmtes installieren? (Hab bis jetzt zwar die Funktionsweise von Ajax gefunden (sieht echt brauchbar aus) aber nicht die Einschränkungen bzw. Anforderungen)
Beitrag geaendert: 23.3.2007 16:03:26 von pinkdragon -
Geht eigentlich mit jedem Browser, da es auf Javascript setzt. Es nutzt eine Bidirektionale Verbindung von Client zum Server, welches das HTPP-Protokoll unterstützt.
-
Danke! Ich versteh zwar fast nichts, glaube aber rauszulesen, dass es keine Probleme geben sollte :P
Falls es sonst noch Ideen gibt, ich bin für alles offen. -
Eine andere Lösung als Ajax wirst du vermutlich nicht finden.
Neben JavaScript wirst du aber auch auf PHP zurückgreifen müssen, da du für Ajax immer eine clientseitige Sprache(JavaScript) und eine serverseitige Sprache (PHP) brauchst.
Falls das dein Lehrer nicht erlaubt, musst du ihm klarmachen, dass es nicht deine Schuld ist, dass es in JavaScript keine Direktverbindung zwischen 2 Clients geben kann -
Kein Problem da mir, wie gesaget sowohl HTML und Javascript also auch PHP und MySQL zur Verfügung stehen ;) Aber jetzt hab ich gleich noch ne Frage: Wie Löse ich am besten nen einfachen Chat? Momentan benütze ich MySQL (was sicher keine schlechte Wahl ist) aber die aktualisierung macht mir kopfzerbrechen. Klar, wenn man selber etwas schreibt, wird es in die DB geschrieben und das eigene Chatfenster wird aktualisiert, aber wie soll der andere wissen, das seines auch aktualisiert werden soll? (derweil mit Javascript daueraktualisierung und Datensatzvergleich) Vermutlich kommt jetzt gleich wieder die Antwort: Ajax... Aber vllt ist es doch nicht die Lösung aller Probleme ;)
-
sieht schon ganz gut aus
-
Ich empfehle eher Textdateien für Chats.
Und dabei die Anwendung der Funktion fseek() und fpassthru(), damit nur neue Daten ausgegeben werden.
$f=fopen('chatdialog.php','r');//Datei, wo chat gespeichert ist. if(!isset($_GET['up']))//Wenn die letzte Abrufposition nicht bekannt ist. $_GET['up']=22;//Dann setze letzte Abrufposition auf Null-Position in der Chatdatei. [1] fseek($f,(int) $_GET['up']);//Setze den Dateizeiger auf letzte Ausleseposition fpassthru($f);//Gib den gesammten neuen Inhalt des Chats aus echo 'up='.filesize('g/test/main');//Gib die "letzte Abrufposition=die Dateigröße=letzte Dateiposition" aus clearstatcache();//Damit die Größe der Datei nicht zwischengespeichert wird
[1]Ich habe in der eigentlichen Chatdatei(chatdialog.php) folgenden Code am Anfang, der exakt 22 Zeichen lang ist:
<!--<?php die(); ?>-->
Damit man die Chatdatei nicht direkt öffnen kann, sondern nur der Server aus der Datei lesen kann.
Das Schreiben in die Chat Datei wird hier nicht berücksichtigt. -
Hmm die Idee (und vor allem der Code) sind echt gut, nur was für Vorteile bringt es mir, statt einer MySQL-Datenbank Textdateien zu verwenden? Weil ein Problem währe auch, dass es durchaus viele Spiele werden könnten, daher würden viele Txt-Dateien den Server 'verschmutzen'. Und wie kann ich sagen, dass diese bei nichtgebrauch wieder gelöscht werden? z.B. wenn beide Spieler einfach den Browser schließen? Müsste ich dann nicht immer manuell schon länger nicht gebrauchte Dateien suchen und entfernen?
Bitte um Aufklärung ;) -
Organisationstechnisch ist MySQL natürlich von Vorteil, aber MySQL wäre ein weiteres Modul, das geladen werden müsste, damit die Aufgabe erfüllt werden kann.
Daher denke ich zumindest, dass man PHP die ganze Arbeit machen lassen sollte.
Ich weiß nicht, ob ich Recht habe. Ich weiß auch nicht, wie fseek() intern arbeitet.
Ich kann mir aber vorstellen, dass die Filestreams in PHP nicht gleich die ganze Datei auslesen und das es daher ein deutlicher Vorteil wäre mit fseek zu arbeiten.
Textdateien haben auch einen anderen Charakter als Datensätze. MySQL überprüft eigentlich jeden Datensatz, ob die Kriterien zutreffen und nicht ab dem ersten positiven gefundenen Datensatz. Ein fpassthru() gibt es in MySQL meines Wissens nicht.
Sind natürlich alles Performance Fragen. Aber gerade bei Chats ist sowas wichtig.
@Beendete Chats: Jede Datei hat den letzten Zugriffszeitpunkt auf sich selbst gespeichert. Du kannst mit einem Cron Job einfach immer alle Chats, die älter als 48h(oder wann auch immer) sind, per Script löschen lassen.
Stichwort: filemtime();
Beitrag geaendert: 24.3.2007 15:14:00 von bladehunter -
bladehunter schrieb:
Du kannst mit einem Cron Job einfach immer alle Chats, die älter als 48h(oder wann auch immer) sind, per Script löschen lassen.
Stichwort: filemtime();
Wie meinen? Könnte ich z.B. immer, wenn ein neues Spiel erstelt wird, alle Daten prüfen und welche älter als 24h sind, löschen? Wenn ja, wie ohne mit php das Verzeichnis oder so auszulesen? (die Funktion ist gesperrt...) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage