wie arbeitet google maps?
-
hallo,
vorneweg: hab nicht besonders tiefgehende erfahrung mit webentwicklung, also wenn jemand einen vorschlag hat, wie man die folgende problemstellung optimaler lösen könnte: immer her mit den vorschlägen, ich bitte darum!
ich hab eine anwendung, die sehr ähnlich ist zu google maps: ein fensterausschnitt wird bei bedarf mit neuen bilddaten gefüllt. nachdem javascript für google maps offensichtlich gut funktioniert, bietet sich an, das ebenfalls zu verwenden.
dabei tritt allerdings ein problem auf: der request muss vom webserver an meine applikation (die ich selbst geschrieben habe und daher nach bedarf anpassen kann, für den fall, dass das relevant ist), welche die bilder erzeugt, weitergeleitet werden bzw. sollen die bild-daten von deren port gestreamt werden.
das xmlhttprequest-objekt verweigert, den request an eine explizite adresse zu senden
self.xmlHttpReq.open('GET', 'http://10.10.50.84:4040/', true);
da ich den port angeben will, muss ich eben auch die adresse dazu schreiben (wenn jemand weiß, wie und ob man das umgehen kann, wären alle weiteren fragen hinfällig) und das veranlasst den xmlhttprequest, die verbindung zu verweigern, soweit ich gelesen habe.
daher muss ich die daten vermutlich irgendwie umleiten. erster (und bisher wohl bester) gedanke war php, irgendwas auf die art:
$fp = stream_socket_client("tcp://localhost:4040", $errno, $errstr, 30); while (!feof($fp)) { echo fgets($fp, 1024); } fclose($fp);
allerdings hab ich ein wenig bauchweh bei dem ganzen -- ich seh einfach zu wenig in php hinein, was hier wirklich passiert. nachdem es sich um viele daten handelt sollte das möglichst schnell gehen.
kopiert php die daten lokal und fügt sie in ein temporäres html ein oder wie funktioniert echo?
gibt es eine möglichkeit, den eingehenden tcp-stream einfach an port 80 umzuleiten, ohne dass von der netzwerkkarte kopiert werden muss?
wären andere techniken/sprachen geeigneter?
hat jemand eine vermutung, wie google maps das macht?
fragen über fragen...
-
hmm ... wirklich viel kann ich dir leider nicht helfen ... aber ...
Ich weiss zumindest relativ sicher das Google Maps mit Ajax funktioniert.
Und das klingt auch (wenn ich ordentlich gelesen hab) nach einer guten
Lösung für dein Problem.Mit Ajax ist es nämlich möglich einzelne Teile z.B. ein Bild einer Seite neu
zu laden oder auszutauschen ohne die ganze Seite komplett neu zu laden.Normalerweise ist über das http Protokoll immer nur der austausch einer
kompletten Seite möglich. Php schreibt Quasi auf dem Webserver mit dem echo
Befehl eine Seite und schickt diese (ebenfalls komplett) an den Client.Ajax umgeht diese Problem.
Leider kann ich dir über die Hintergründe aber weiter nichts sagen.
-
naja, was ich hier versuche
self.xmlHttpReq.open('GET', 'http://10.10.50.84:4040/', true);
IST ja ajax. ich würde damit nur das bild austauschen, nicht die komplette seite. die frage ist nur, wie bekomme ich serverseitig die von meiner applikation erzeugten bilddaten in den entsprechenden response rein?
-
Vieleicht hilft dir das weiter: http://en.wikipedia.org/wiki/Data:_URI_scheme
-
hmh. danke, aber das ist nicht ganz das, wonach ich suche -- zur zeit bette ich die bilddaten mit entsprechendem MIME-type versehen im html ein (zzt. eben mit der while-schleife in php), die verwendung von data: würde die selben fragen aufwerfen, alles was dann anders wäre, wären die kopfdaten.
-
Aber auf src der Bilder kannst du mit Javascript zugreifen auf die eingebetteten Daten nicht.
-
Die bessere Lösung nennt sich SOAP ist aber etwas komplexer, aber macht das Leben im nach hinein leichter. Bau dir mit PHP eine kleine SOAP Anwendung, dann kannst du durch AJAX zu greifen. Für dein AJAX vorhaben empfehle ich dir aber ehr ein AJAX Framework, mein Favorit ist: http://jquery.com/ Da gibts eigentlich für jedes Problem etwas. Ach ja Google-Maps kommuniziert auch via SOAP.
-
Andorxor schrieb:
Aber auf src der Bilder kannst du mit Javascript zugreifen auf die eingebetteten Daten nicht.
ich hatte eigentlich vor, die innerHTML eigenschaft eines <div>-tags zu verwenden, um dort rohdaten (meinetwegen in 'nem <img>-tag geschachtelt), mit zugehörigem MIME-type zu platzieren. bin jetzt dran gescheitert. geht denn das nicht? so in der art irgendwie, so ähnlich:
... <div> <object type="image/jpeg">hier-die-jpegdaten</object> </div> ...
hab das mit dem data: URI-scheme jetzt hinbekommen, danke im nachhinein! würde das aber trotzdem gern vermeiden wenn möglich, da das ja wieder vom IE nicht unterstützt wird.
jd schrieb:
Bau dir mit PHP eine kleine SOAP Anwendung, dann kannst du durch AJAX zu greifen.
gut, schau ich mir gleich als nächstes an, danke.
jd schrieb:
Für dein AJAX vorhaben empfehle ich dir aber ehr ein AJAX Framework
nachdem sich mein bedarf an ajax auf das dynamische aktualisieren eines einzigen bild-tags beschränkt stellt sich mir die frage: welchen vorteil habe ich dadurch? ich habe so den eindruck, dass ich nicht mehr brauche, als eine funktion, die mir ein bild nachlädt und einfügt und möchte jeglichen overhead vermeiden. übersehe ich da etwas?
-
iko79 schrieb:
ich hatte eigentlich vor, die innerHTML eigenschaft eines <div>-tags zu verwenden, um dort rohdaten (meinetwegen in 'nem <img>-tag geschachtelt), mit zugehörigem MIME-type zu platzieren.
Stichwort DOM und Nodes
-
Das kommt drauf an du musst die deine Bilder ja auch dynamisch hohle, was du ja mit PHP ohne Page-Refresh nicht hin bekommst. Darum kannst du mit AJAX direkt auf SOAP zu greifen sprich AJAX+PHP+SOAP ist eine super Kompination und dazu empfehle ich dir ein AJAX Framework. Um Overhead würde ich mir so schnell mal keine sorgen machen.
-
iko79 schrieb:
dabei tritt allerdings ein problem auf: der request muss vom webserver an meine applikation (die ich selbst geschrieben habe und daher nach bedarf anpassen kann, für den fall, dass das relevant ist), welche die bilder erzeugt, weitergeleitet werden bzw. sollen die bild-daten von deren port gestreamt werden.
was spricht dagegen einfach img src auf die url zu setzen? wenn du die daten eh richtig auslieferst, warum nicht direkt an den user statt ueber eine ecke?
-
Shade Of Mine schrieb:
was spricht dagegen einfach img src auf die url zu setzen? wenn du die daten eh richtig auslieferst, warum nicht direkt an den user statt ueber eine ecke?
ehrlich gesagt kann ich nicht ganz folgen. die daten direkt vom socket der applikation abzuholen reicht nicht aus, ich muss ja dafür sorgen, dass das bild laufend aktualisiert wird. was meinst du?
-
iko79 schrieb:
Shade Of Mine schrieb:
was spricht dagegen einfach img src auf die url zu setzen? wenn du die daten eh richtig auslieferst, warum nicht direkt an den user statt ueber eine ecke?
ehrlich gesagt kann ich nicht ganz folgen. die daten direkt vom socket der applikation abzuholen reicht nicht aus, ich muss ja dafür sorgen, dass das bild laufend aktualisiert wird. was meinst du?
was musst du laufend aktualisieren?
googlemaps ist bei mir ziemlich statisch, da bewegt sich nichts.
-
bei mir schon. ^^ wenn du die karte ziehst, dann bewegt sich die auch. und wird ständig nachgeladen, was ziemlich deutlich sichtbar ist.
-
aber ist es nicht so, dass das auch wieder nur rechteckige bilder sind die da nachgeladen werden und dann eben der ausschnitt den der user sehen will angezeigt wird?
-
jap. worauf willst du hinaus? 0_o
-
iko79 schrieb:
jap. worauf willst du hinaus? 0_o
dass du nur image objekte hast die du positionieren musst. und diese image objekte brauchen keine komischen cross-domain requests sondern lassen den browser das bild laden. imho baust du das ganze viel zu kompliziert auf...
-
Shade Of Mine schrieb:
imho baust du das ganze viel zu kompliziert auf...
das kann gut sein! dann mach doch mal 'nen konkreten vorschlag, wie ich das bewerkstelligen soll, ich kenn mich ja kaum aus mit dem zeugs, genau deshalb frag' ich ja. am besten mit ein wenig code wenn das möglich ist.
btw: ich hab jetzt herausgefunden, dass ich den request mit dem proxy-modul ganz einfach umleiten kann, so hab ichs bis jetzt gelöst. allerdings steh ich jetzt vor dem nächsten problem, nämlich dass ich das bild zwar per http empfange, jedoch nicht weiß was ich damit anfangen soll. mithilfe von data: URI scheme kann ichs direkt ins html einbetten, aber das funzt ja im IE wieder nicht. langsam glaub ich, das führt alles zu nichts und ich verwend' einfach ganz andere technologien. flash zum beispiel.