Kommunikation ist alles

JEP 380: Unix-Domain Socket Channels

Dominik Mohilo

© Software & Support Media GmbH / Bianca Röder

TCP/IP ist schön und gut, aber effektiver und vor allem sicherer Läuft die Interprozesskommunikation (IPC) via Unix-Domain-Sockets. Damit auch Java-Entwickler von den umfangreichen Funktionen profitieren können, wurde JEP 380: Unix-Domain Socket Channels ins Leben gerufen. Vor exotischeren und Linux-spezifischen Funktionen wird allerdings größtenteils Halt gemacht.

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.

Verwandte Themen:

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: