Hallo alle zusammen,
ich kämpfe mit der Klasse [JAPI]AsynchronousSocketChannel[/JAPI] bzw. ihrem verhalten. Und zwar ist mir aufgefallen, dass beim Schließen derselbigen nicht in allen Fällen die Daten, die ich über diese geschrieben / abgesetzt habe, übertragen werden. In manchen Fällen kommen die letzten zur Übertragung übergebenen Daten bei der Gegenstelle einfach nicht an. Wenn ich einen Thread.sleep(1000); zwischen der letzten Übergabe und dem Schließen einbaue, funktioniert wunderbar. Dass das Problem nicht immer auftritt, wird wahrscheinlich an irgendwelchen Nebenläufigkeiten liegen, vermute ich einmal.
Um etwas mehr ins Detail zu gehen: Ich übergebe der write Methode des Channels die Daten inkl. einem [JAPI]CompletionHandler[/JAPI]. Dieser fragt nach einem erfolgreich Schreiben ab, ob alle Daten geschrieben wurde. Wenn nein, wird versucht den Rest zu versenden. Wenn ja, wird eine Queue abgefragt, ob noch weitere Daten anliegen und wenn ja, werden diese mit einem weiteren write Aufruf versendet. Holt sich der Handler ein spezielles Schließ-Paket aus der Queue, wird innerhalb des Handlers der Channel geschlossen und der Verarbeitung signalisiert, dass die Verbindung beendet wurde.
Hier ist ein Blog Eintrag, der ein ähnliches Problem bei [JAPI]AsynchronousFileChannel[/JAPI] beschreibt. Leider lässt sich die Lösung, so weit ich es gesehen habe, nicht auf [JAPI]AsynchronousSocketChannel[/JAPI] übertragen.
Niklas' Blog: Java 7: Closing NIO.2 file channels without loosing data
Hat jemand von Euch schon mit ähnlichen Problemen zu kämpfen gehabt?
ich kämpfe mit der Klasse [JAPI]AsynchronousSocketChannel[/JAPI] bzw. ihrem verhalten. Und zwar ist mir aufgefallen, dass beim Schließen derselbigen nicht in allen Fällen die Daten, die ich über diese geschrieben / abgesetzt habe, übertragen werden. In manchen Fällen kommen die letzten zur Übertragung übergebenen Daten bei der Gegenstelle einfach nicht an. Wenn ich einen Thread.sleep(1000); zwischen der letzten Übergabe und dem Schließen einbaue, funktioniert wunderbar. Dass das Problem nicht immer auftritt, wird wahrscheinlich an irgendwelchen Nebenläufigkeiten liegen, vermute ich einmal.
Um etwas mehr ins Detail zu gehen: Ich übergebe der write Methode des Channels die Daten inkl. einem [JAPI]CompletionHandler[/JAPI]. Dieser fragt nach einem erfolgreich Schreiben ab, ob alle Daten geschrieben wurde. Wenn nein, wird versucht den Rest zu versenden. Wenn ja, wird eine Queue abgefragt, ob noch weitere Daten anliegen und wenn ja, werden diese mit einem weiteren write Aufruf versendet. Holt sich der Handler ein spezielles Schließ-Paket aus der Queue, wird innerhalb des Handlers der Channel geschlossen und der Verarbeitung signalisiert, dass die Verbindung beendet wurde.
Hier ist ein Blog Eintrag, der ein ähnliches Problem bei [JAPI]AsynchronousFileChannel[/JAPI] beschreibt. Leider lässt sich die Lösung, so weit ich es gesehen habe, nicht auf [JAPI]AsynchronousSocketChannel[/JAPI] übertragen.
Niklas' Blog: Java 7: Closing NIO.2 file channels without loosing data
Hat jemand von Euch schon mit ähnlichen Problemen zu kämpfen gehabt?