Wenn ich eine Verbindung mit new Socket("unit.domain.com", 100)
herstelle und der unit.domain.com
DNS-Eintrag mehrere IP-Adressen im A-Eintrag enthält. Stellt Java bei einer fehlgeschlagenen Verbindung automatisch eine Verbindung her die anderen Adressen in der Liste wie der Browser? oder muss das manuell implementiert werden?Java ausgehendes TCP-Verbindungs-Failover basierend auf mehreren DNS-Ergebnissen
4
A
Antwort
5
Nein! Erstellen eine Buchse über new Socket (String, int) zu einer Lösung wie diese
addr = InetAddress.getByName(hostname);
, die eine Abkürzung für
return InetAddress.getAllByName(host)[0];
Die Adressauflösung in dem Sockel c-tor durchgeführt wird.
Wenn Sie die Verbindung wiederherstellen müssen (Failover), verwenden Sie das Ergebnis von InetAddress.getAllByName (Host), randomize (oder verwenden Sie Round-Robin) und stellen Sie eine Verbindung zu den erforderlichen Adressen her.
Edit: auch wenn Sie mit einigen wahrscheinlichen Fehler verbinden müssen, wäre es besser, mit der Methode connect der Socket-Klasse mit einem Timeout. Auch stellen Sie sicher, dass Sie sogar ausgefallene Sockets (und insbesondere Kanäle) schließen, da sie eine FD on * Nix auslecken können.
Verwandte Themen
- 1. Formattable basierend auf mehreren Spalten
- 2. Fallanweisung basierend auf mehreren Spaltenwerten
- 3. select Beobachtungen basierend auf mehreren Bedingungen
- 4. Durchschnittswerte basierend auf mehreren Dropdown-Listen
- 5. aus mehreren Tabellen Wert basierend auf Spalte
- 6. Summe basierend auf mehreren Bereichen in SSRS
- 7. von XML Lesen basierend auf mehreren Attributen
- 8. tapply basierend auf mehreren Indizes in R
- 9. Wählen Sie Werte basierend auf mehreren Tasten
- 10. Python Argsort Indizes basierend auf mehreren Arrays
- 11. Speichern von Suchsätzen basierend auf mehreren Bedingungen
- 12. SSRS Lookup Basierend auf mehreren Bedingungen
- 13. Excel-Summierungswerte basierend auf mehreren Bedingungen
- 14. Java-Generics basierend auf Rückgabetyp?
- 15. Selenium Webdriver: Checkbox basierend auf mehreren Zeilenwerten finden
- 16. Sortier JavaScript-Objekt basierend auf mehreren Eigenschaft basierend auf dort Priorität
- 17. JAVA Eine Zeichenkette auf mehreren Linien umkehren
- 18. Java: Synchronisieren von Threads auf mehreren Servern
- 19. Erstellen Sie Java-Sandbox basierend auf Sicherheitsrichtlinien
- 20. Regulärer Ausdruck Basierend auf Bedingung in Java
- 21. Java Multilateration Implementierung basierend auf Wikipedia Gleichungen
- 22. Java-Programm das Array basierend auf Markierungen
- 23. SQL-Abfrage basierend auf Benutzereingabe in Java
- 24. Java Streams - Wie basierend auf Funktionsausgang richtig
- 25. Sortierung ArrayList in Java basierend auf Benutzereingabe
- 26. Setters basierend auf Array-Index in Java
- 27. Java ersetzt mehrere Teile (basierend auf Indizes)
- 28. Java- Verarbeitung Json-Array auf Schlüsseln basierend
- 29. Java Job Scheduler basierend auf Redis?
- 30. Datenbankentwurf zum Berechnen von Raten basierend auf mehreren Variablen
OK, es ist an der Zeit, dass ich gefragt habe. Was ist * Nix? –
Er steht für "unix alike", das Schließen von Sockets unter Linux/Unix ist zweiphasig und aufgrund einiger Unzulänglichkeiten kann die 2. Phase nicht abgeschlossen werden und ein berüchtigtes FD-Leck hinterlassen, es sei denn, es erfolgt ein ordnungsgemäßer Aufruf von close(). Stellen Sie also sicher, dass Sie alle SocketChannel (Sockets) schließen, unabhängig davon, ob connect() erfolgreich ist – bestsss