In jedem System laufen diverse Prozesse ab. Diese können zuweilen das Bedürfnis verspüren, miteinander zu kommunizieren. Diese Interprozesskommunikation (IPC) kann etwa auf dem gleichen Host stattfinden. Hierfür sollen mit JEP 380 auch Unix-Domain-Sockets (AF_UNIX
) für die APIs der Klassen Socket
und ServerSocket
eingeführt werden, die im Package java.nio.channels
zu finden sind. Auch inheritedChannel
soll im Zuge des JEPs entsprechend optimiert werden.
Unterstützt werden sollen vor allem die Features werden, die auf sämtlichen großen Unix-Plattformen und unter Windows Standard sind. Exotischere Funktionen bleiben zunächst außen vor, wobei sogenannte peer-credentials
hier eine Ausnahme darstellen könnten, wenn es nach Michael McMahon geht, der das Proposal eingereicht hat.
Generell sind Unix-Domain-Sockets quasi das Gleiche wie TCP/IP-Sockets. Allerdings gibt es einen bedeutenden Unterschied: Während TCP/IP-Sockets via IP-Adressen und Port-Nummern adressiert werden, funktioniert das bei Unix-Domain-Sockets über Pfadnamen des entsprechenden Dateisystems. Dennoch sollen sich die neuen Channels auf genau die gleiche Art und Weise verhalten, wenn es etwa um Dinge wie das Verhalten bei read/write-Aktionen oder das Verbindungssetup geht.
Warum das Ganze? Die Sicherheit spielt dabei eine Rolle, die bei Unix-Domain-Sockets höher ist. Außerdem ist die Interprozesskommunikation via Unix-Domain-Sockets effizienter, so McMahon, als die standardmäßig genutzten TCP/IP-Loopback-Verbindungen. Für Windows-Nutzer ist diese Änderung ebenfalls vorteilhaft, werden Unix-Domain-Sockets doch seit Kurzem auch auf Windows-10- und Windows-Server-2019-Systemen unterstützt.
Sollte JEP 380 offiziell ins JDK einfließen, wird mit java.nio.channels.UnixDomainSocketAddress
ein neuer Socket-Adresstyp eingeführt, für das enum java.net.StandardProtocolFamily
kommt dann ein konstante Wert UNIX
. In den Klassen SocketChannel
und ServerSocketChannel
wird neuer normativer Text eingeführt, der eine Unterscheidung zwischen den existierenden TCP/IP-Typen und Unix-Domain-Socket-Channels ermöglicht. Zu guter Letzt werden statische Open-Factory-Methoden in die beiden Klassen SocketChannel
und ServerSocketChannel
als sogenannte ProtocolFamily
aufgenommen.
Wer sich das Ganze bereits jetzt einmal ansehen will, der kann sich diese Änderungen im JDK Sandbox Repository anschauen. Weitere Informationen und technische Details gibt es wie immer im entsprechenden JEP selbst.