Mam aplikację Scala, która utrzymuje (lub próbuje) połączenia TCP z różnymi serwerami godzinami (prawdopodobnie> 24) na raz. Każdy serwer wysyła krótki, ~ 30-znakowy komunikat około dwa razy na sekundę. Komunikaty te są przekazywane do iteratee, gdzie są analizowane i ostatecznie kończą wprowadzanie zmian stanu do bazy danych.Niezbędne niezawodne/trwałe gniazda wychodzące, opcje?
Jeśli którekolwiek z tych połączeń z jakiegoś powodu nie powiedzie się, moja aplikacja musi nieustannie próbować nawiązać połączenie, dopóki nie określę inaczej. Wszelkie wiadomości zgubione są złe. Nie mam kontroli nad serwerami, z którymi się łączyłem lub używanymi protokołami.
Można sobie wyobrazić, że będzie ich aż 300 na raz. Brak dokładnie scenariusza wysokiego obciążenia, więc nie sądzę, że NIO jest potrzebny, chociaż może być miło mieć? Inne bity aplikacji są bardzo obciążone.
Szukam jakiegoś kontrolera gniazda/menedżera, który może utrzymywać te połączenia tak niezawodnie, jak to możliwe. Używam teraz własnego kontrolera blokowania, ale ponieważ nie mam doświadczenia z kodowaniem gniazd (i wszystkimi różnymi ustawieniami, opcjami, przekroczeniami czasu itp.), Wątpię, aby osiągnął najlepszy możliwy czas działania. Poza tym w pewnym momencie potrzebuję wsparcia SSL.
Czy NIO miałoby jakiekolwiek rzeczywiste korzyści?
Czy Netty będzie najlepszym wyborem? Widziałem przykład Uptime here i myślałem o jego powieleniu, ale będąc nowicjuszem w sieciach niskiego poziomu, nie byłem pewien, czy istnieją lepsze opcje.
Wykrywanie rozłączeń i ponowne łączenie powinno być trywialne, nawet z java.net.Socket. – pedrofurla
Myślę, że naprawdę szukasz niezawodnej usługi przesyłania wiadomości.Zobacz różne implementacje JMS. – EJP
Tak, to jest trywialne; jak wspomniałem powyżej, mam coś działającego. Nie mam jednak pewności, jakie są najlepsze strategie, aby zapewnić jak najmniejszą liczbę zgubionych pakietów i założyć, że jest to problem "rozwiązany" w jednej lub w drugiej bibliotece. Przypuszczam, że wiele z tego sprowadzałoby się do strategii zgadywania czasu oczekiwania? Zamknij i ponownie otwórz gniazdo zbyt wcześnie, aby stracić wszystkie pakiety podczas podróży. – Grant