Asynchrone Socket-Abfragen

SpeedyDust

Mitglied
Hallöchen ihr Lieben! :)

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 ^^

Gibt es da eine einfache Möglichkeit? :eek:

Würde mich sehr über ein paar Antworten freuen :)


Liebe Grüße
 

DrZoidberg

Top Contributor
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?
 

SpeedyDust

Mitglied
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? :D

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 ^^
 

DrZoidberg

Top Contributor
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.
 

SpeedyDust

Mitglied
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.
Leider erzeugt auch das reine Senden hier etwas Lag, sobald mehrmals pro Sekunde etwas gesendet werden muss ^^
Hatte ich so auch nicht erwartet.

Und wie würde das mit dem Thread ausschauen? :eek:
Klingt ja eigentlich schon ganz gut :D

//Edit: Hab's hinbekommen! ^^ Vielen Dank dir, klappt perfekt :D <3
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
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");
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
G Socket Verbindung aufbauen Java Basics - Anfänger-Themen 11
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
J Socket schließen - Ist eine SocketException unumgänglich? Java Basics - Anfänger-Themen 4
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
N Socket-Programmierung Java Basics - Anfänger-Themen 4
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
B Socket OutputStream Java Basics - Anfänger-Themen 17
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
B Socket, args Java Basics - Anfänger-Themen 22
L Socket in JTextArea Java Basics - Anfänger-Themen 9
T Input/Output Zwei InputStreams von einem Socket Java Basics - Anfänger-Themen 2
B Socket Problem Java Basics - Anfänger-Themen 3
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
M Versand von Nachrichten via Socket (Delay) Java Basics - Anfänger-Themen 21
F socket-problem Java Basics - Anfänger-Themen 6
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
E Socket (Client) dauerhaft aktiv? Java Basics - Anfänger-Themen 9
D Java - Socket - Datenübertragung Java Basics - Anfänger-Themen 18
E Input/Output einfachen Socket für XML-Anfragen bauen Java Basics - Anfänger-Themen 13
R Cannot find a free socket for the debugger Java Basics - Anfänger-Themen 6
F Socket Kommunikation Java Basics - Anfänger-Themen 4
M "Connection reset" gbxRemote Socket Java Basics - Anfänger-Themen 9
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
L FTP per Socket Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
M Socket Server Java Basics - Anfänger-Themen 9
N Socket Problem? Java Basics - Anfänger-Themen 9
G Socket erstellen dauert sehr lange. Java Basics - Anfänger-Themen 4
H Java Socket Java Basics - Anfänger-Themen 14
A XML Daten über Socket Java Basics - Anfänger-Themen 3
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
C Socket Programmierung Java Java Basics - Anfänger-Themen 4
F Socket Instanz auf Klasse welche von Socket erbt zuweisen Java Basics - Anfänger-Themen 3
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
J Daten von einem (char*)Socket einlesen. Java Basics - Anfänger-Themen 3
S Java Socket Java Basics - Anfänger-Themen 3
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
M Ändern einer Socket-Eigenscheft aus einem modalen Dialog? Java Basics - Anfänger-Themen 6
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
ven000m Bitcoin Blockhöhe abfragen Java Basics - Anfänger-Themen 12
S If abfragen (+, - , /, *) Java Basics - Anfänger-Themen 13
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
Phash Websocket abfragen Java Basics - Anfänger-Themen 1
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
M Checkbox abfragen und Radiobutton Group zurücksetzen Java Basics - Anfänger-Themen 1
L Datenpaare abfragen Java Basics - Anfänger-Themen 11
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
B Serial port abfragen Java Basics - Anfänger-Themen 18
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
T Erste Schritte Textfeld abfragen ob etwas enthalten ist. Java Basics - Anfänger-Themen 17
S mehrfache if-Abfragen - beste Lösung Java Basics - Anfänger-Themen 1
E Abfragen des SimpleDateFormats Java Basics - Anfänger-Themen 1
L int array abfragen Java Basics - Anfänger-Themen 16
T Variablen Var aus While-Schleife abfragen -.-' Java Basics - Anfänger-Themen 9
Y Mehrdimensionales Array diagonal abfragen. Java Basics - Anfänger-Themen 5
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
T if abfragen verkürzen Java Basics - Anfänger-Themen 5
M Wo Hilfsvariablen abfragen? Java Basics - Anfänger-Themen 1
M Farben/Color Abfragen von Farben innerhalb einer Methode Java Basics - Anfänger-Themen 9
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
M Frage nach BestPractice in if-Abfragen Java Basics - Anfänger-Themen 1
P Anlegen und Abfragen von Array List Java Basics - Anfänger-Themen 4
R IF Abfragen Java Basics - Anfänger-Themen 8
R If Abfragen Problem! Java Basics - Anfänger-Themen 4
I Button abfragen ob er geklickt wurde Java Basics - Anfänger-Themen 4
C If Abfragen Problem Java Basics - Anfänger-Themen 46
I Drei booleans abfragen Java Basics - Anfänger-Themen 2
R Input/Output Java String abfragen Java Basics - Anfänger-Themen 3
A Vokabel abfragen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
E Checkboxen abfragen Java Basics - Anfänger-Themen 10
H if abfragen Java Basics - Anfänger-Themen 38
C TreeMap Abfragen Problem Java Basics - Anfänger-Themen 7
S Abfragen wenn das ende einer Tabelle erreicht ist Java Basics - Anfänger-Themen 8
B mehrere Abfragen zusammenfügen Java Basics - Anfänger-Themen 3
H durch Schleife 50 Variablen abfragen Java Basics - Anfänger-Themen 8
B If abfragen! Java Basics - Anfänger-Themen 9
J checkbox status abfragen und drucken Java Basics - Anfänger-Themen 13
M AWT Applet - Button aus anderer Klasse abfragen Java Basics - Anfänger-Themen 4
F Bedingungen mit Abfragen verknüpfen Java Basics - Anfänger-Themen 7
P länge von array abfragen? Java Basics - Anfänger-Themen 2
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben