Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich stehe momentan vor einem kleinen Problem, bei dem ich nicht so richtig weiter weiß.
Durch Socket-Abfragen entstehen ja, je nach Umfang, auch gern mal Lags.
Da dies allerdings für meine Anwendung sehr schlecht ist, dachte ich an eine asynchrone Verbindung. Dabei dürften dann ja eigentlich keine Lags entstehen.
Allerdings kenne ich mich damit absolut nicht aus und habe auch bei Google nichts gefunden, dass mich erleuchtet hat ^^
Um nur mit Java Bordmitteln einen Socket asynchron zu verwenden gibt es zwei Möglichkeiten. Du kannst einen neuen Thread starten und den Socket darin erstellen und verwenden oder du nimmst AsynchronousSocketChannel. Aber in beiden Fällen hantierst du dann mit mehreren Threads und musst in deinem Code auf korrekte Synchronisierung achten.
Kannst du uns genauer erklären, was du mit diesen Sockets dann machen willst und wieso da zu viel Lag entsteht?
Um nur mit Java Bordmitteln einen Socket asynchron zu verwenden gibt es zwei Möglichkeiten. Du kannst einen neuen Thread starten und den Socket darin erstellen und verwenden oder du nimmst AsynchronousSocketChannel. Aber in beiden Fällen hantierst du dann mit mehreren Threads und musst in deinem Code auf korrekte Synchronisierung achten.
Kannst du uns genauer erklären, was du mit diesen Sockets dann machen willst und wieso da zu viel Lag entsteht?
Nun ja .. ^^ Ich arbeite an einer Minecraft-Mod.
Was mir noch eingefallen ist, ist, dass ich eigentlich bloß Daten an den Server senden muss, brauche also keine Antwort.
Würde es das vllt etwas vereinfachen?
Was ich senden möchte ist unterschiedlich, meistens Daten für Statistiken, etc.
Das passiert während des normalen Spielgeschehens, wo Lags natürlich weniger gut ankommen würden.
Darum suche ich nach einer asynchronen Lösung ^^
Wenn du nur Daten senden willst, macht das die Sache einfacher. Du könntest zum Beispiel jedes Mal, wenn es was zu senden gibt, einen neuen Thread erstellen und das dann darin senden. Wie häufig werden Daten verschickt? Mehrmals pro Sekunde oder nur selten? Im übrigen erzeugt das Senden von Daten in der Regel keinen Lag im Gegensatz zum Empfang, da dann auf Daten gewartet werden muss.
Wenn du nur Daten senden willst, macht das die Sache einfacher. Du könntest zum Beispiel jedes Mal, wenn es was zu senden gibt, einen neuen Thread erstellen und das dann darin senden. Wie häufig werden Daten verschickt? Mehrmals pro Sekunde oder nur selten? Im übrigen erzeugt das Senden von Daten in der Regel keinen Lag im Gegensatz zum Empfang, da dann auf Daten gewartet werden muss.
Also wenn du sehr häufig was sendest, wäre es am besten die Verbindung wird dauerhaft aufrechterhalten.
Du könntest dafür einen Thread starten, dessen einzige Aufgabe es ist, Daten vom Rest des Programms zu empfangen und dann an den Server zu schicken, z.B. mittels einer BlockingQueue, die genau für solche Zwecke gedacht ist.
Das könnte dann so aussehen:
Java:
import java.io.PrintWriter;
import java.io.IOException;
import java.net.Socket;
import java.util.concurrent.LinkedBlockingQueue;
public class Test {
private static final LinkedBlockingQueue<String> sendQueue = new LinkedBlockingQueue<>();
private static void send(String data) {
sendQueue.offer(data);
}
public static void main(String[] args) {
new Thread(() -> {
PrintWriter out = null;
try {
Socket so = new Socket("server", 12345);
out = new PrintWriter(so.getOutputStream());
} catch(IOException e) {
e.printStackTrace();
return;
}
while(true) {
try {
String s = sendQueue.take();
out.println(s);
} catch(InterruptedException e) {
}
}
}).start();
send("data");
}
}