UNIX-Socket-Implementierung für Java?

Lesezeit: 3 Minuten

UNIX Socket Implementierung fur Java
Adam Bellaire

Mir ist klar, dass, da UNIX-Sockets plattformspezifisch sind, etwas Nicht-Java-Code beteiligt sein muss. Insbesondere sind wir daran interessiert, JDBC zu verwenden, um eine Verbindung zu einer MySQL-Instanz herzustellen, bei der nur UNIX-Domänen-Sockets aktiviert sind.

Es sieht nicht so aus, als ob dies unterstützt wird, aber nach dem, was ich gelesen habe, sollte es zumindest möglich sein, eine SocketFactory für JDBC basierend auf UNIX-Sockets zu schreiben wenn Wir können eine anständige Implementierung von UNIX-Sockets für Java finden.

Hat das jemand probiert? Kennt jemand eine solche Implementierung?

  • Warum nicht einfach den JDBC-Treiber für MySQL verwenden?

    – Peter Lawrey

    6. Mai ’09 um 18:34

  • Weil es TCP/IP-Sockets anstelle von Unix-Domain-Sockets verwendet?

    – Paul Tomblin

    6. Mai ’09 um 19:14

  • Die bessere Frage ist “Warum nicht TCP/IP aktivieren und dann den JDBC-Treiber für MySQL verwenden?”, aber manchmal können wir diesen Anruf nicht tätigen 🙂

    – GWLlosa

    13. Mai ’09 um 13:36

  • Laut Stevens sind Unix-Domain-Sockets doppelt so schnell wie TCP/IP-Sockets

    – neuhaus

    29. September ’16 um 13:19

UNIX Socket Implementierung fur Java
njsf

Schauen Sie sich die JUDS-Bibliothek an. Es ist eine Java-Unix-Domain-Socket-Bibliothek…

https://github.com/mcfunley/juds

  • Ich verwende juds gerade, um UDS zu hören, und erhalte eine abgefangene Ausnahme java.io.IOException: Unix-Domain-Socket kann nicht geöffnet werden. Irgendeine Idee, was falsch sein könnte?

    – Winkel

    17. November ’15 um 5:12

  • @Angel, normalerweise die Ursache für Berechtigungsprobleme. Versuchen Sie, Ihre Anwendung von root zu starten. Wenn es hilft – dies ist definitiv ein Berechtigungsproblem (Sie müssen die App von einem Benutzer mit der erforderlichen Berechtigung starten)

    – iMysak

    23. September ’16 um 1:06

Sie könnten junixsocket verwenden: https://github.com/kohlschutter/junixsocket

Es stellt bereits Code für die Verbindung zu MySQL von Java (Connector/J) über Unix-Sockets bereit.

Ein großer Vorteil gegenüber anderen Implementierungen besteht darin, dass junixsocket die standardmäßige Java Socket API verwendet.

  • auch junixsocket ist Apache 2.0-Lizenz, während juds LGPL ist

    – Santhosh Kumar Tekuri

    9. August ’15 um 5:59

  • Ich kann es nicht empfehlen. Sie können die Methode accept() nicht stoppen, indem Sie den Socket schließen. Nur durch das Stoppen des Threads, was wahrscheinlich eine schlechte Idee ist..

    – xoned

    5. Okt ’16 um 7:05

Als Original kohlschutter/junixsocket , die in einer anderen Antwort erwähnt wird, scheint tot zu sein, Sie können sich die Gabeln ansehen.

Besonders fiken/junixsocket sieht vielversprechend aus. Der Autor hat Unterstützung für die Verbindung zu PostgreSQL mit Unix-Socket über . hinzugefügt pgjdbc, zum Beispiel.

1641819918 465 UNIX Socket Implementierung fur Java
Robert

Der MariaDB JDBC-Treiber unterstützt dies jetzt und ist mit dem MySQL JDBC-Treiber kompatibel.

Verwenden Sie eine JDBC-URL wie:

jdbc:mariadb://localhost:3306/revmgt?localSocket=/var/run/mysqld/mysqld.sock

Es ist erwähnenswert, dass diese Bibliothek die Einbeziehung der JNA-Bibliothek erfordert, da sie JNA verwendet, um auf native Unix-Domain-Sockets zuzugreifen. Bei meinen Tests funktioniert es ganz gut. Ich habe Geschwindigkeitsverbesserungen bei CPU-gebundenen Java-Prozessen vom Offload zum nativen Code gesehen.

1641819918 661 UNIX Socket Implementierung fur Java
Dave Cheney

Schauen Sie sich die JNA-Bibliothek an. Es ist ein Mittelweg zwischen reinem Java und nativem JNI-Code

https://github.com/twall/jna/

  • Danke, Dave. Es sieht so aus, als könnten wir JNA verwenden, um unsere eigene Socket-Implementierung zu schreiben, und dann eine SocketFactory darüber schreiben, obwohl ich gehofft hatte, etwas bereits Geschriebenes zu finden. 🙂

    – Adam Bellaire

    4. Okt. 08 um 16:34 Uhr

  • Stöbern Sie in der Jruby-Quelle, sie verwenden JNA, um viele reine Ruby-Sachen zu simulieren, einschließlich Fork! Es gibt auch Beispiele für eine Posix-Klasse, die die meisten der benötigten C-Level-Funktionen einschließen sollte

    – Dave Cheney

    4. Okt. 08 um 16:49 Uhr

Ab Java 16 werden Unix-Domain-Sockets nativ von Java durch . unterstützt SocketChannel und ServerSocketChannel API.

Weitere Informationen dazu finden Sie in JEP380 Vorschlags- und Umsetzungsbeispiel Hier.

  • Danke, Dave. Es sieht so aus, als könnten wir JNA verwenden, um unsere eigene Socket-Implementierung zu schreiben, und dann eine SocketFactory darüber schreiben, obwohl ich gehofft hatte, etwas bereits Geschriebenes zu finden. 🙂

    – Adam Bellaire

    4. Okt. 08 um 16:34 Uhr

  • Stöbern Sie in der Jruby-Quelle, sie verwenden JNA, um viele reine Ruby-Sachen zu simulieren, einschließlich Fork! Es gibt auch Beispiele für eine Posix-Klasse, die die meisten der benötigten C-Level-Funktionen einschließen sollte

    – Dave Cheney

    4. Okt. 08 um 16:49 Uhr

1641819918 206 UNIX Socket Implementierung fur Java
Brett Okken

Der JNR-Projekt (was eine lockere Basis für Projekt Panama) hat ein Unix-Socket Implementierung.

.

304150cookie-checkUNIX-Socket-Implementierung für Java?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy