Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-11-2005, 21:21   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Ort: Freiburg
Beiträge: 74
Kommunikation Java -> Flash

Hallo zusammen,

ich suche nach einer Lösung, die Koordinaten mehrerer Objekte (momentan max. 12) aus Java möglichst schnell (etwa 60x/Sekunde) an Flash zu übergeben. Aktuell (es funktioniert) werden die Koordinaten folgendermaßen vom Java-Programm in ein Textdokument geschrieben, z.B.:
PHP-Code:
x0=12.5&y0=16.668&x1=37.5&y1=16.66&x2=62.5&y2=16.66&x3=87.5&y3=16.66 
Wäre es hier sinnvoller folgendes Format zu verwenden...
PHP-Code:
coordinates=12.5:16.668;37.5:16.66;62.5:16.66;87.5:16.66 
...also Koordinatenpaare z.B. durch ein Semikolon zu trennen und x und y-Koordinaten durch einen Doppelpunkt? Der Vorteil wäre, dass die Anzahl der Koordinaten unbegrenzt ist, ich also daraus ein Array erzeugen kann und dieses Array dann innerhalb Flash einmal durchlaufen kann. Ob ich dadurch einen Geschwindigkeitsverlust habe, weiß ich nicht (wie schnell ist split?), und wie ich split auf diesen String anwende, um daraus ein mehrdimensionales Array erzeuge, weiß ich ebensowenig ;-(

Das Textdokument sorgt auf jeden Fall für einen Geschwindigkeitsverlust, das wurde mir in einem anderen Thread verdeutlicht.

Ich habe den ganzen Tag nach Alternativen gesucht, bin aber trotz vieler halber Lösungsansätze nicht wirklich weitergekommen. Anscheinend gibt es verschiedene Möglichkeiten für einen solchen Datenaustausch, wie z.B.:
  • ein XMLSocket
  • ein XMLSocket als "simpler String"
  • die Koordinaten über das Netzwerk zu senden - also anstelle des Textdokumentes die Koordinaten über eine Art Java-Webserver über einen bestimmten Port zur Verfügung stellen...
  • ein Tool Namens Serializer, welches wohl für die Kommunikation zwischen PHP und Flash gedacht ist. Serializer scheint es auch für Java zu geben, ich habe aber keine Ahnung ob die kompatibel sind.
Kann mir jemand sagen welche Lösung die schnellste und sauberste ist? Toll wäre es, wenn auch Macromedia Director auf die Daten zugreifen könnte, aber nicht zwingend erforderlich.

Viele Grüße
Ben
Benjamecho ist offline   Mit Zitat antworten
Alt 29-11-2005, 21:30   #2 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
tach

die zeit zum parsen der daten, ist in vergleich zum laden einer textdatei so gering, dass du darüber nichtmal nachdenken solltest.
die sauberste und beste lösung ist eine socket verbindung, die in java schon einfach ist, (wenn man java kann).
- der Serializer ist im prinzip das gleiche wie das laden einer datei. also vergiss es
- und "Koordinaten über das Netzwerk zu senden " ist die socket geschichte, das gleiche wie der punkt "ein XMLSocket" und "ein XMLSocket als "simpler String"".

mein tipp: socket verbindung machen, strings senden, fertisch

gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!
artjom ist offline   Mit Zitat antworten
Alt 29-11-2005, 21:36   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Ort: Freiburg
Beiträge: 74
Danke Dir! Würdest Du die Koordinaten dann in der Form...
PHP-Code:
coordinates=12.5:16.668;37.5:16.66;62.5:16.66;87.5:16.66 
...senden und danach splitten, oder eher die erste Version?

NACHTRAG
P.S. Hat sich erledigt - so machen wir es :-)

Geändert von Benjamecho (30-11-2005 um 10:11 Uhr)
Benjamecho ist offline   Mit Zitat antworten
Alt 30-11-2005, 10:10   #4 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Ort: Freiburg
Beiträge: 74
Noch eine Frage: ich habe soeben mit dem Programmierer der Java-Applikation gesprochen und er bräuchte noch ein paar Details um den "Socket" programmieren zu können, leider habe ich wiederum nicht viel gefunden, außer das der Port > 1024 sein soll. Irgendwo habe ich was von einem 0-Byte am Ende gelesen, finde es aber nicht wieder. Braucht man sowas?

Muss es eine "Push" oder "Pull" Verbindung sein, oder ist beides möglich?
Mir wäre es lieber, er würde Daten senden, wenn sie sich ändern - eine Abfrage seitens Flash in einem regelmäßigen Intervall, ob sich etwas geändert hat, scheint mir nicht so sinnvoll.

Gibt es sonst noch was zu beachten?

Viele Grüße
Ben
Benjamecho ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:46   #5 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
Zitat:
Zitat von Benjamecho
Muss es eine "Push" oder "Pull" Verbindung sein, oder ist beides möglich?
Mir wäre es lieber, er würde Daten senden, wenn sie sich ändern - eine Abfrage seitens Flash in einem regelmäßigen Intervall, ob sich etwas geändert hat, scheint mir nicht so sinnvoll.
du stellt fragen und beantwortest sie gleich. wir kennen den sinn der anwedung nicht, von daher ist es fallabhängig. wenn du z.b die daten vom server verschicken willst, wenn sie sich ändern, und du es an 5000 clienten gleichzeitig broadcastest, dann haste n kleines problem.
ob du daten im klartext verschickst ist auch so ne sache was die sicherheit betrifft. du muss übrigens immer davon ausgehen, dass man den flash-programmcode sehen kann.

ja und sende die daten gleich so:
Code:
12.5:16.668;37.5:16.66;62.5:16.66;87.5:16.66
denn dieses "coordinates=" brauchst du nur in textdateien usw.

port>1024 und null-byte am ende ist auch richtig.

gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!
artjom ist offline   Mit Zitat antworten
Alt 30-11-2005, 21:21   #6 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Ort: Freiburg
Beiträge: 74
Hallo,

ich war mir nicht sicher ob sowohl push als auch pull möglich sind, daher die Frage. Die Verbindung mit dem Server konnte ich bereits über Flash aufbauen, allerdings keine Daten empfangen. Über die Kommandozeile und...
PHP-Code:
telnet 127.0.0.1 1234 
...werden die gewünschten Daten (Koordinaten) wie gewünscht ausgegeben. Mein Actionscript (liegt in einem sonst leeren Film, in Bild1) sieht so aus:
PHP-Code:
server "127.0.0.1";
port "1234";

socket = new XMLSocket();
socket.onConnect = function(success) {
    if (
success) { trace ("Connection succeeded!"); }
    else { 
trace ("Connection failed!"); }
}

socket.onClose = function() { trace ("Connection closed!"); }
socket.onData = function(){    trace("da kommt was..."); } 

if (!
socket.connect(serverport)){ trace ("Error: Connection failed!"); } 
Die gewünschten Statusmeldungen (...succeeded, ...failed + ...closed) werden auch korrekt ausgegeben. Momentan gehen die Daten nur an einen Client und es werden wenn überhaupt später max. 2 oder 3, allerings unterstützt die Java-Seite auch bisher nur einen Thread. Über Sicherheit mache ich mir bei der Anwendung vorerst keine Gedanken, denn sie wird nur lokal ausgeführt, aber aus Neugier: wie kann jemand über den Socket meinen Programmcode sehen? Flash wird eigentlich "nur" zur Visualisierung der Koordinaten benötigt - wir planen aber auch Versuche mit Director, aber eins nach dem anderen...

Woran kann es liegen, dass die onData Funktion nicht ausgeführt wird?

Leider kann ich kein Java programmieren, hätte aber sowieso keinen Zugriff auf den Sourcecode, und der Programmierer (Dozent von mir) hat leider wenig Zeit um meine Wünsche umzusetzen und braucht klare Vorgaben von mir.

Kann es am Zeichensatz liegen? Ich hab' keine Ahnung ob das UTF-8 ist, oder nicht.

Viele Grüße + vielen Dank!!!!
Ben
Benjamecho ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele