Vad en Jedis SOCKS-socketfabrik måste returnera
Jedis 5.2.0 förväntar sig en ansluten socket som är redo för Redis, inklusive TLS när det krävs; själva proxyvalet ger inte den anslutningen.
JedisSocketFactory.createSocket måste returnera en ansluten socket som är redo att bära Redis-trafik. I Jedis 5.2.0 tillhandahåller programmet den fabriken och sin Redis-klientkonfiguration här:
var jedis = new Jedis(socksSocketFactory, redisConfig);socksSocketFactory implementerar redis.clients.jedis.JedisSocketFactory, och redisConfig är programmets JedisClientConfig. Var redo att ansluta när konstruktorn körs: den kan utföra autentisering och andra Redis-inställningar direkt.
Följ en socket från skapande till överlämning
För en oautentiserad SOCKS5-rutt kan fabriken skapa en java.net.Socket med en explicit Proxy.Type.SOCKS-mellanhand och sedan ansluta till Redis-värden och -porten. Låt målet vara olöst om SOCKS-servern ska slå upp värdnamnet.
Begränsa anslutningsförsöket och tillämpa den avsedda läs-timeouten. Om anslutningen misslyckas, stäng den socketen och rapportera JedisConnectionException; fabriksgränssnittet deklarerar ingen kontrollerad IOException.
Om Redis kräver TLS, upprätta och verifiera TLS innan socketen lämnas tillbaka. Man kan inte anta att en separat flagga omvandlar en godtycklig socket som fabriken returnerar. För en pool upprepar du denna livscykel med en ny socket vid varje fabriksanrop, inklusive ersättningsanslutningar.
Ett HTTP-val i en global ProxySelector är inte en alternativ implementering av detta arbete. Redis skickar RESP över sin socket; den blir därmed inte HTTP och förhandlar inte CONNECT.