Ich hatte einen Java-Server mit Java nio
sockets entwickelt. Es ist der Code meiner Anwendung:
}
Wenn ich mit 2-3 Clients teste, funktioniert es gut, aber als ich es mit ca. 100-300 Client getestet habe, bin ich mehrmals unter Ausnahme gelandet (Tatsächlich ist es passiert in write()
Methode und Zeile socketChannel.write(dummyResponse);
:
und dann kann ich keine Nachrichten vom Server empfangen.
Wenn Sie das Ende des Streams erhalten ( read()
gibt -1 zurück), schließen Sie den Kanal nicht, so dass Kanäle verloren gehen. Sie müssen den Kanal schließen und beachten, dass dadurch der Schlüssel automatisch gelöscht wird. Es genügt nicht, den Schlüssel allein zu löschen. Gleiches, wenn Sie den Schlüssel abbrechen, weil clientNumber == null
oder Sie IOException
erhalten.
NB: Sie sollten OP_WRITE
nicht registrieren, es sei denn, Sie haben gerade eine Null von einem write()
-Aufruf erhalten, und Sie sollten es abmelden, wenn Sie diese Null nicht erhalten.