Hallo!
Ich benutze ein kleines AJAX-Script bei meinem Game. Funktionuiert wunderbar. Jetzt habe ich einen http-Server auf einem anderem Port laufen, der die AJAX-Anforderungen berarbeitet, und auf dem standart-Port weiterhin meinen Apache. Bekanntlicherweise lässt XMLHttpRequest keine Aufrufe an andere Domains zu, und wie ich eben gemerk habe, auch nicht an andere Ports. Als Umgehung habe ich mir ein PHP-Script gebastelt, welches die Seite aufruft, jedoch dauert das irgendwie sehr lange (ca. 30 Sekunden). Wenn ich die Seite manuell im Browser aufrue ist sie ruck-zuck da. Eine Weiterleitung mittels HTTP funktioniert auch nicht, da meldet mir mein AJAX Fehler: 302 - Found. Also es wird die Weiterleitung erhalten, aber nicht ausgeführt.
Jetzt meine Frage: Wie kann ich drauf zugreifen, bzw. die Seite effektiv weiterleiten?
AJAX -> Andere Domain/Port
gepostet vor 18 Jahre, 6 Monate von Fornax
gepostet vor 18 Jahre, 6 Monate von Flint
Wie ruft den den dein PhP Script die Seite auf dem anderen Port auf. Wenns auf dem selben Server ist sollte das ja eigentlich recht schnell gehen. Wobei sich natürlich die Frage stellt, wenns auf dem selben Server ist warum auf nem anderen Port ^^
gepostet vor 18 Jahre, 6 Monate von knalli
Hm ja, warum überhaupt anderer Port? Weil wenn du eh ein Script bauem musst, was das umleitet, kommt mir spontan kein Vorteil hevor?
gepostet vor 18 Jahre, 6 Monate von MagicForrest
Ist das ganze vllt für einen eigenen Browser?
Habe für meinen DemoBrowser auch einen eigenen C++ Server geschrieben, und das ganze läuft über einen anderen Port, und anderer Software.
Aber falls du das nur Browserbased machst, also für jeden Browser, erkenne ich den Grund nicht, warum ein anderer Port verwendet werden sollte.
Würd mich echt interessieren warum ein anderer Port...
Und für sowas kann man notfalls auch eine kleine Serveranwendung schreiben.. kommt aber darauf an wofür man's wirklich braucht, und ob sich der Aufwand lohnt..
Habe für meinen DemoBrowser auch einen eigenen C++ Server geschrieben, und das ganze läuft über einen anderen Port, und anderer Software.
Aber falls du das nur Browserbased machst, also für jeden Browser, erkenne ich den Grund nicht, warum ein anderer Port verwendet werden sollte.
Würd mich echt interessieren warum ein anderer Port...
Und für sowas kann man notfalls auch eine kleine Serveranwendung schreiben.. kommt aber darauf an wofür man's wirklich braucht, und ob sich der Aufwand lohnt..
gepostet vor 18 Jahre, 6 Monate von Fornax
Also hier der Code, ich hab beide Varianten probiert, passiert bei beidem das Gleiche:
$fp = fsockopen("computer", 8080, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)
\n";
}
else{
fputs ($fp, "GET /ajax/karte/" . $user . " HTTP/1.1\r\n\r\n");
while(!feof($fp)){
echo fgets($fp, 12;
//ob_end_flush();
}
fclose($fp);
}
Das hab ich leider nicht mehr als Code, hab's hier mal versucht zu rekonstruieren:
$handle = fopen('http://computer:8080/ajax/karte/' . $user, 'r');
echo(fread($handle, 1024));
Ich habe mein Game in php geschrieben, es läuft auf dem Apache. Im Hintergrund lasse ich einen Daemon für die Rohstoffberechnung etc. laufen. Auf meiner Karte werden die Planetendetails per AJAX nachgeladen. Da habe ich mir gedacht, dass ich die Anfragen vom AJAX mal probeweise von meinem Daemon beantworten lasse (zufälligerweise hat mir heute ein Freund ein Server-Script gegeben, damit ich das mal auf Fehler prüf). Dieser lauscht nun schön auf Port 8080, und nimmt die Anfragen entgegen - solange kein AJAX im Weg steht
$fp = fsockopen("computer", 8080, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)
\n";
}
else{
fputs ($fp, "GET /ajax/karte/" . $user . " HTTP/1.1\r\n\r\n");
while(!feof($fp)){
echo fgets($fp, 12;
//ob_end_flush();
}
fclose($fp);
}
Das hab ich leider nicht mehr als Code, hab's hier mal versucht zu rekonstruieren:
$handle = fopen('http://computer:8080/ajax/karte/' . $user, 'r');
echo(fread($handle, 1024));
Ich habe mein Game in php geschrieben, es läuft auf dem Apache. Im Hintergrund lasse ich einen Daemon für die Rohstoffberechnung etc. laufen. Auf meiner Karte werden die Planetendetails per AJAX nachgeladen. Da habe ich mir gedacht, dass ich die Anfragen vom AJAX mal probeweise von meinem Daemon beantworten lasse (zufälligerweise hat mir heute ein Freund ein Server-Script gegeben, damit ich das mal auf Fehler prüf). Dieser lauscht nun schön auf Port 8080, und nimmt die Anfragen entgegen - solange kein AJAX im Weg steht
gepostet vor 18 Jahre, 6 Monate von Flint
Da währe natürlich die erste Frage ob der Server auch das macht was du von ihm erwartest
Du sagst es dauert sehr lang mit dem Script, stimmt den das Ergebniss nach den 30 Sekunden oder ist das einfach der timeout für den Verbindungsaufbau ?
Du sagst mit dem Browser funktionierts, währe also die nächste Frage ob der Server dein fputs auch als gültige HTTP Anfrage erkennt und damit genau so reagiert wie bei einem Zugriff mit dem Browser. Wenn nähmlich keine Antwort vom Server kommt hängst du in einer Endlosschleife die sicher irgendwann in einen Timeout läuft.
Du sagst es dauert sehr lang mit dem Script, stimmt den das Ergebniss nach den 30 Sekunden oder ist das einfach der timeout für den Verbindungsaufbau ?
Du sagst mit dem Browser funktionierts, währe also die nächste Frage ob der Server dein fputs auch als gültige HTTP Anfrage erkennt und damit genau so reagiert wie bei einem Zugriff mit dem Browser. Wenn nähmlich keine Antwort vom Server kommt hängst du in einer Endlosschleife die sicher irgendwann in einen Timeout läuft.
gepostet vor 18 Jahre, 6 Monate von Itchy
Fornax - probier mal, im HTTP Header die Version auf 1.0 zu setzen. Mit HTTP 1.1 sind nämlich persistente Verbindungen dazugekommen. Evtl. hält der Server die Verbindung 30 Sekunden offen und macht sie dann zu und erst dann terminiert das die Funktion.
gepostet vor 18 Jahre, 6 Monate von blum
ich würd mir bei dem script, das auf port 8080 lauscht, mal alles mögliche zur laufzeit ausgeben/mitloggen lassen.
wann genau verbindet ein client, wann schreibt er was, wann schliesst er die verbindung wieder etc.
dann kannst du auch besser nachvollziehen, wo es hakt. es muss nicht an ajax liegen.
wann genau verbindet ein client, wann schreibt er was, wann schliesst er die verbindung wieder etc.
dann kannst du auch besser nachvollziehen, wo es hakt. es muss nicht an ajax liegen.
gepostet vor 18 Jahre, 6 Monate von Fornax
@Itchy: Damit hatte ich es auch schon probiert
@Flint: Um das auszuschließen, werde ich jetzt den Vorschlag von blum umsetzen
EDIT: Ich hab die Ausgabe der Zeiten eingebaut, und das dem berichtet, von dem ich die DLL habe. Er fragte: "hast du auch pSocket.Disconnect(); drin?" - "Da war nichts im Beispiel und in der Doku... Ich dachte, das amcht er automatisch, wenn er mit dem Script fertig ist, ich kenn deine DLL ja nicht von innen". Jetzt hat sich das Problem mit der Ladezeit erledigt, ich habe nurnoch ein kleines Problem: Die HTTP-Header werden von AJAX als HTML interpretiert... liegt wohl an der Weiterleitung, das bekomm ich wsl. alleine hin.
ach, danke für eure Hilfe
@Flint: Um das auszuschließen, werde ich jetzt den Vorschlag von blum umsetzen
EDIT: Ich hab die Ausgabe der Zeiten eingebaut, und das dem berichtet, von dem ich die DLL habe. Er fragte: "hast du auch pSocket.Disconnect(); drin?" - "Da war nichts im Beispiel und in der Doku... Ich dachte, das amcht er automatisch, wenn er mit dem Script fertig ist, ich kenn deine DLL ja nicht von innen". Jetzt hat sich das Problem mit der Ladezeit erledigt, ich habe nurnoch ein kleines Problem: Die HTTP-Header werden von AJAX als HTML interpretiert... liegt wohl an der Weiterleitung, das bekomm ich wsl. alleine hin.
ach, danke für eure Hilfe