mmofacts.com

Dummes dummes Ajax

gepostet vor 18 Jahre, 9 Monate von Macavity
Nein..das drückt es nicht so recht aus... ajax ist schon sehr praktisch (wenn man keine Fehler im JS-Teil hat -.-'' )

aber ich habe ein kleines störendes Problem. Das Ding ist das man eine Karte hat (wer meinen anderen Post gesehen hat...ja es ist die gleiche Karte) von 20 mal 20 Feldern auf denen der Spieler zu sehen ist.
Da die Seite nicht bei jedem Schritt komplett neuladen soll, aber trotzdem auch andere Spieler und deren Bewegung angezeigt werden sollen habe ich den Teil über Http-Dings gemacht.

also bei jedem Schritt wird geschaut ob noch andere Spieler auf der Map sind und diese werden angezeigt.

nur leider will das nicht so wie ich will. man betrachte folgendes Beispiel:
Heinz steht auf 10/10 (Koordinaten) und sieht das Chris auf (15/13) ist.
Dann geht Heinz auf 11/11 und sieht das Chris auf 15/14 ist,
Chris geht weiter auf 15/15.
Heinz hat einen geistesblitz und will noch schnell zum Waffenhändler um sich ein neues Scheibchenschneidegerät zu kaufen geht dafür auf 10/10 und "sieht" das Chris auf 15/13 ist...was aber nicht der Fall ist Chris ist auf 15/15...

jemand eine Idee woran das liegt? ich vermute mal das das Ergebnis der Anfrage im Cache liegt aber wie umgehe ich das geschickt? Cache löschen wäre - selbst wenn ich wüsste wie - eher dumm weil da ja auch diverse Bilderchen drin sind...
gepostet vor 18 Jahre, 9 Monate von Mudder
Kommt nen Mann zum Arzt und erzählt eine ellenlange Geschichte über die Zubereitung des Mittags was es gestern gab.
Wiso ist der Mann zum Arzt gegangen?

Dein Problem hat meiner Meinung nach nix mit AJAX zu tun.. sondern wenn was mit deiner Positionsberechnung der Figuren. Wenn dir nen AJAX-Script sagt, dass Figur A auf Pos 10:10 steht und Figur B auf 12:15, dann wird es da kaum zu Zeitlappungen o.ä. kommen können.

Da kann im Grunde nur dein Positionsberechnungsscript dran schuld sein, was die Position von Figur B in relation von Figur A setzt bzw. dort was mit reinrechnet.
gepostet vor 18 Jahre, 9 Monate von Macavity
nur leider gibt es gar kein Positionsberechnungsscript.
das ist eine schlichte Anfrage an die Datenbank, da ist gespeichert wo wer steht und da wird reingeschaut.

Aber das wird ganz offensichtlich ignoriert...
gepostet vor 18 Jahre, 9 Monate von Mudder
Wie jetzt?
Wenns nur ums auslesen von Werten geht, dann hats mit AJAX ja noch weniger zu tun.

Also erkläre jetzt doch bitte nochmal wie dein Script arbeitet bzw. was du wo ausliesst und anzeigst..
gepostet vor 18 Jahre, 9 Monate von schokofreak
seine ajax response wird, wo auch immer, gecached.
Dies ist eigentlich nicht so erwünscht Das einfachste ist, wenn du beim Request eine zusätzliche Variable mitgibst... und diese mit nem Random-Wert abfüllst.

Somit verhinderst du erfolgreich, dass ein weiss auch nicht wie gearteter Cache das ganze zwischenspeichert.

Die frage ist allerdings, ob das Caching wirklich dein problem ist - mit dem Trick seihst du es sehr schnell.
Würde aber, falls caching nicht dien prob ist, dennoch die randwerte drinnen lassen -> zumindest bei den AJAX requests, welche NIE gecached werden sollen.

Gruss
gepostet vor 18 Jahre, 9 Monate von Macavity
hm...
da ist eine Datenbank. in der steht in einer tabelle welcher spieler an welcher position auf welcher karte ist.

wenn sich nun ein spieler auf der karte in bewegung setzt wird ein request an eine php-datei geschickt die wiederum in die datenbank schaut welche anderen spieler noch auf der karte rumlaufen und leitet dann ein dass diese gefälligst an ihrer Position angezeigt werden.

soll ich den relevanten Code posten?
gepostet vor 18 Jahre, 9 Monate von Mudder
..
Wenn Spieler A sich nach 11:11 bewegen will, schickst du dann auch die Koordinaten von Spieler B mit wo er grade steht und speicherst diese dann?

Oder ist es so, dass wenn sich Spieler A bewegt und dann der Update-Befehl für die Figuren kommt, dass Spieler B noch auf Feld 10:15 steht obwohl er der Zeitberechnung nach schon auf 11:15 stehen müsste.
gepostet vor 18 Jahre, 9 Monate von schokofreak
Original von Macavity

soll ich den relevanten Code posten?


nein du sollst mudder ignorieren und meinen Post lesen.
Wenn das dann klappt ist gut; ansonsten ist das Problem in deiner Client / deiner Serverlogik.
gepostet vor 18 Jahre, 9 Monate von Mudder
Phf.. dann halt ich halt meine Finger..

(ich bin ja nur derjenige der nen funktionierendes AJAX-System und Kartenerfahrung hat)
gepostet vor 18 Jahre, 9 Monate von Macavity
ah die idee mit dem weitergeben ist ne idee..aber random ist dann eher ungeschickt oder? wenn ich einfach einen zähler weitergebe müsste es sicherer sein da ja ein zähler immer anders ist aber bei random auch mal das gleiche kommen kann oder?

@Mudder
(der vollständigkeit halber)
Wenn Spieler A sich nach 11:11 bewegen will, schickst du dann auch die Koordinaten von Spieler B mit wo er grade steht und speicherst diese dann?

nein

Oder ist es so, dass wenn sich Spieler A bewegt und dann der Update-Befehl für die Figuren kommt, dass Spieler B noch auf Feld 10:15 steht obwohl er der Zeitberechnung nach schon auf 11:15 stehen müsste.

auch nicht. es gibt auch keine zeitberechnung... nix berechnung... *kopfschüttel*
wenn ein spieler sich auf ein feld bewegt wird über ajax seine position in der DB gespeichert. man kann sich immer nur um ein Feld bewegen. wär ja noch schöner... und es wird eben dieser Wert für andere spieler auf der gleichen Karte abgefragt.

Edit:
ah prima mit dem zähler funktionierts ^^
gepostet vor 18 Jahre, 9 Monate von Chojin
Original von Mudder
(ich bin ja nur derjenige der nen funktionierendes AJAX-System und Kartenerfahrung hat)

und wer hats erfunden? :mrgreen:

@Macavity: Vergiss die Zufallszahl. In deine PHP Datei die vom Server per Ajax übertragen wird kommt das hier rein (und zwar ganz oben):

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Content-Type: text/xml');
?>

reg4rds
chojin
gepostet vor 18 Jahre, 9 Monate von knalli
Wobei man bei dynamischen Seiten grundsätzlich sich Gedanken machen sollte, ob obiger Header (ggf. natürlich mit anderem Contentheader) nicht global sinnvoll wäre... :roll:
gepostet vor 18 Jahre, 9 Monate von schokofreak
Mudder: ich weiss das tönt jetzt scheisse, aber was du machst hab ich schon vorlangem aufgehört zu tun
DAs ist n klassiker, wo der junge mann reingetrampt ist.

Und ja; Random sollt reichen, denn die anderen Attribute sind ja normalerweise auch nciht die selben :-)
Was ich allerdings auch gerne / oft getan hab ist in der Tat n zähler... und dann bei 1000 n auto Logout. ABER: Zähler alleine kann bei einer neuen Session zu Cache Problemen führen. deshalb ZWINGEND ein Random.

Stell dir vor du hast ID 1, logoff, logon, hast wieder ID 1.

gruss
gepostet vor 18 Jahre, 9 Monate von Macavity
hm gut. ist aber im verhältnis deutlich umfangreicher oder? mal jetzt im direkten vergleich habe ich beim anderen ja einfach ne zahl angehängt....

aber gut ich merks mir ^^
gepostet vor 18 Jahre, 9 Monate von schokofreak
gegen solche Header wehre ich mich wehement!
-> im Zusammenhang mit Ajax.

Wieso? als server stört mich ein Caching nicht; das kriegt man gut in den Griff. 1 Zufallszahl reicht problemlos aus.

Bei AJAX heist die Devise, möglichst atomare und kleine Requests / responses zu senden. Ein sauberes handling des Caches benötigt 10 mal so viel Platz wie die AJAX message.

Stell dir vor, im Normalfall ist ne ajax message n:
 

200 ok
conten-length:3

NOP


Wenn du da drüberausgehst, fliegst schon bald aus allen rahmen... buffer, frames, ... bei AJAX sollte die Netzlast in meinen Augen atomar und klein sein.

Gruss
gepostet vor 18 Jahre, 9 Monate von Chojin
Original von schokofreak
Und ja; Random sollt reichen, denn die anderen Attribute sind ja normalerweise auch nciht die selben :-)
Was ich allerdings auch gerne / oft getan hab ist in der Tat n zähler... und dann bei 1000 n auto Logout. ABER: Zähler alleine kann bei einer neuen Session zu Cache Problemen führen. deshalb ZWINGEND ein Random.


Hey schoko,

der will keinen staubsauger kaufen... er hat doch nur nach nem feuchten tuch zum aufwischen gefragt... :roll:

ein eigenes sessionmanagement zu entwerfen ist weit über das ziel hinaus, als einfach nur besagten header auf jeder seite einzubauen.

reg4rds
chojin
gepostet vor 18 Jahre, 9 Monate von Macavity
ich glaub in dem fall ist es aber echt simpler einfache nen zähler mitzuschicken als in jeder datei den header einzubauen...
gepostet vor 18 Jahre, 9 Monate von schokofreak
choin... bin ins philosophieren geraten
Wer mit Ajax PHP Session Management einsetzt ist eh dof

Ok, werde mich aus dem session management heraushalten.

@macavity: right. der server muss den randomwert ned mal auswerten

Auf diese Diskussion antworten