Що має повертати фабрика SOCKS-сокетів для Jedis
Jedis 5.2.0 очікує підключений сокет, готовий для Redis, включно з TLS за потреби; самий лише вибір проксі не дає такого з’єднання.
JedisSocketFactory.createSocket має повертати підключений сокет, готовий передавати трафік Redis. У Jedis 5.2.0 застосунок передає цю фабрику та свою конфігурацію клієнта Redis тут:
var jedis = new Jedis(socksSocketFactory, redisConfig);socksSocketFactory реалізує redis.clients.jedis.JedisSocketFactory, а redisConfig — це JedisClientConfig застосунку. Будьте готові до підключення вже під час запуску конструктора: він може одразу виконати автентифікацію та інші налаштування Redis.
Простежте один сокет від створення до передавання
Для маршруту SOCKS5 без автентифікації фабрика може створити java.net.Socket з явним посередником Proxy.Type.SOCKS, а потім підключитися до хоста й порту Redis. Залиште адресу призначення невирішеною якщо сервер SOCKS має сам розв’язати ім’я хоста.
Обмежте спробу підключення та застосуйте заданий тайм-аут читання. Якщо з’єднання не вдалося, закрийте цей сокет і повідомте JedisConnectionException; інтерфейс фабрики не оголошує перевірюваний IOException.
Якщо Redis вимагає TLS, встановіть і перевірте TLS перед поверненням сокета. Не можна припускати, що окремий прапорець перетворить довільний сокет, повернутий фабрикою. Для пулу повторюйте цей життєвий цикл з новим сокетом під час кожного виклику фабрики, включно із замінювальними з’єднаннями.
Вибір HTTP у глобальному ProxySelector не є альтернативною реалізацією цієї роботи. Redis надсилає RESP через свій сокет; від цього він не стає HTTP і не узгоджує CONNECT.