Wie erstelle ich eine blockiernde Funktion?

Status
Nicht offen für weitere Antworten.

Empire Phoenix

Top Contributor
Nunja ich brache eine blockende Funktion, diese soll dazu dienen, dass wenn ich aufn dem Client bestimmte Befehle ausführe solange gewartet wird, bis ich die Antwort bekomme, also wie die statement.executequery und so.

Die Frage ist, wie kann ich eine Function dazu bringen auf ein bestimmtes Ereignis zu warten(Tutorials snippets, Anleitungen?)?
 
G

Gelöschtes Mitglied 5909

Gast
hast du dein eigenes mini protokoll geschrieben oder was?

nehm doch einfach RMI
 

Empire Phoenix

Top Contributor
Ja, ich hatte mir ein UDP Protokoll das das der Source engine nachamt gebaut. (Das ganze ist für ei Spiel gedacht, daher UDP)

Generel kann ich auch nicht klagen, weil es ziemlich schnell ist, es fehlt mir halt nur eine Idee wie ich auf Antworten warten kann, für einige wenige Befehle brauche ich das nämlich. Falls es für die Ideenfindung hilft,

Das Protokoll hat eine Enumeration die den Typ angibt, und ich kann beliebige runnables dynamisch an jeden Befehl tackern und auch wieder entfernen.

Daher ist halt mein Konzept sowas wie:

Funktionsstart
Eine auf die Antwort wartende Runnable erstellen, die diese Funktion unblockt.
Frage an server senden
Blocken.
-runnable wird in Folge der Antwort ausgeführt
-entblockt die Funktion und übergibt die Antwort
 
G

Gelöschtes Mitglied 5909

Gast
wie wärs mit nem sleep und nem listener der bei ner eingehenden message interupt aufruft?

oder auch wait / notify / join
 
T

tuxedo

Gast
Wieso UDP? Bei spielen tut's auch TCP (viele großen Spiele benutzen TCP).

Wenns nicht allzugroßes ist kannst du auch RMI oder SIMON benutzen. Die Performance ist für das allermeiste sicherlich mehr als ausreichend.

Wenn du mit TCP zu hohe Latenzen hattest, hast du vermutlich nicht den Nagle-Algo deaktiviert. RMI und SIMON haben das von Haus aus schon.



- Alex
 

Empire Phoenix

Top Contributor
Rmi -> nicht I-Net.
Simon -> ganz nett wohl, aber zu viel des guten, ein simpler netzcode reicht.
tcp-> nicht packetorientiert, dadurch können byteverschiebungen auftreten.

Code:
	public static void Blockingtest() throws UnknownHostException, InterruptedException{
		final Lock lock  = new ReentrantLock(); 
		final Condition condition = lock.newCondition();
		Command bla = new Command("test",MessageType.Ping){
			@Override
			public void run(ByteBuffer byteBuffer) {
				condition.notify();
				Command.RemoveRunnable("test",MessageType.Ping);
			}
			
		};
		Command.Register(bla);
		Message test = new Message(MessageType.Ping,0);
		test.Send(InetAddress.getLocalHost(),20000);
		condition.await(2000, TimeUnit.MILLISECONDS);
	}

Soweit so gut, nur das ich java.lang.IllegalMonitorStateException im condition.await bekomme.
Ich weis, dass das irgetwas mit dem lock besitzer oder so zu tun hat aber wirklich verstehen tue ichs noch nicht.

Was genau mache ich falsch?
 
T

tuxedo

Gast
Zu RMI: Ja, ich mag's auch nicht
Zu Simon: Wieso zuviel des guten? Latenz niedrig, Overhead gering, Anwendung und Einsatz einfach.
Zu TCP: Ich meinte damit eher: Lass UDP weg. Der Aufwand dafür ist zu groß. Immerhin kann es sein dass Pakete nicht ankommen (das ist bei UDP eben der Fall). Also musst du dich auch noch darum kümmern. Dazu ist es nicht "blockierend", was man auch selbst machen muss.

Zu deinem wait/notify Problem: Probier mal die zwei Befehle in einen "synchronized" Block zu stecken. Hilfe dazu gibts in der "Java Insel".

- Alex
 

Empire Phoenix

Top Contributor
Jup auffer Insel war ich schon habe ich aber leider nicht wirklich verstanden.

Zum Packetverlust, das ist nichtweiter wichtig,weil wenn die daten zu spät ankommen sindse sowieso nciht mehr gültig. Zum blokierend, das sind wenn überhaupt 1% aller benötigten Befehle.
 
T

tuxedo

Gast
Zur Insel:
Naja, man kanns auch verkomplizieren. Ich mach das meist so:

Code:
Object myMonitor = new Object();

synchronized (myMonitor){
myMonitor.wait();
}

In zum aufwecken aus einem anderen Thread heraus:

Code:
synchronized(myMonitor){
myMonitor.notify();
}

Und was ist mit der Reihenfolge? Die ist bei UDP auch nicht gewährt.

Aus den eingegangenen Paketen musst du ja eh wieder Methodenaufrufe formen. Und daher wäre RMI (im LAN) oder SIMON (im Internet) schon ganz praktisch.

Aber gut, jedem das seine.

- Alex
 
G

Gast

Gast
HALLO....ich würde gern auf meiner Homepage verhindern, dass User meine Daten kopieren oder den Quelltext öffnen. Bei HP im Internet sah ich mal, dass beim Klick auf die rechte Maustaste die Meldung erschien ""Sie sind nicht befugt diese Funktion auszuüben." oder auch netter ""Bitte speichern Sie nicht unsere Daten. Senden Sie uns eine Mail."
Welchen Eintrag muss ich im Quelltext vornehmen, damit keiner meine Bilder speichert oder den Quelltext öffnet? Antworten gern an Mail john.neidhardt@web.de

Danke Euch!
 

masta // thomas

Bekanntes Mitglied
Wie kommst du darauf, dass das etwas mit dem Thema hier zu tun hast?
Nichtsdestotrotz: du solltest deine Idee verwerfen, es gibt kein Schutzmechanismus einen Client daran zu hindern den Quelltext einzusehen - dieser muss letztlich ja an den Client übertragen werden, um in deinem Fall die Seite darzustellen. Ist er einmal übertragen, gibt es immer eine Möglichkeit ihn einzusehen. Deine Idee mit der rechten Maustaste: und was ist mit dem Menü (Firefox) Ansicht -> Seienquelltext anzeigen? Oder was ist, wenn der Client JavaScript deaktiviert hat? Schon ist dein Schutz pfutsch. Summa summarum: vergiss es. ;)
Was ist außerdem an einem HTML Quelltext so spannend? Oder gehts um die Bilder? Die kriegt der User auch mit einem Snapshot gespeichert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
B Codierung bei der Anbindung an eine REST API Netzwerkprogrammierung 3
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
I Server schickt eine Nachricht an Broadcast Netzwerkprogrammierung 2
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
L ActiveMq - wie kann ich eine Queue löschen? Netzwerkprogrammierung 2
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
N eine klasse mit server & client Netzwerkprogrammierung 5
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
H Eine Mac-Adresse übers Internet ermitteln Netzwerkprogrammierung 2
V Alle Ip-Adressen eine Lokalen-Netzwerkes erfragen Netzwerkprogrammierung 9
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
Q Problem bei Vergleichen von Strings übertragen über eine Socketverbindung Netzwerkprogrammierung 3
G binden auf eine bstimmte IP und Netzwerkinterface Netzwerkprogrammierung 12
G Warum eine java.net.ConnectException? Netzwerkprogrammierung 7
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
M Wie läd man eine HTML Seite in Java runter Netzwerkprogrammierung 2
A Anmeldung an eine Active Directory? Netzwerkprogrammierung 5
T Möglichkeit über das Netzwerk eine Funktion zu starten? Netzwerkprogrammierung 2
F String in eine URL umwandeln Netzwerkprogrammierung 7
M Wie empfange ich eine ftp liste? Netzwerkprogrammierung 12
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
R auf RemotPC eine Applikation starten Netzwerkprogrammierung 10
D Zwei Applikationen eine Liste? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben