O que uma fábrica de sockets SOCKS do Jedis deve devolver
Jedis 5.2.0 espera um socket ligado e pronto para o Redis, incluindo TLS quando necessário; escolher apenas um proxy não fornece essa ligação.
JedisSocketFactory.createSocket deve devolver um socket ligado e pronto para transportar tráfego Redis. No Jedis 5.2.0, a aplicação fornece essa fábrica e a sua configuração de cliente Redis aqui:
var jedis = new Jedis(socksSocketFactory, redisConfig);socksSocketFactory implementa redis.clients.jedis.JedisSocketFactory, e redisConfig é o JedisClientConfig da aplicação. Esteja pronto para ligar quando o construtor executar: pode realizar a autenticação e outras configurações do Redis imediatamente.
Acompanhe um socket desde a criação até à entrega
Para uma rota SOCKS5 sem autenticação, a fábrica pode criar um java.net.Socket com um intermediário Proxy.Type.SOCKS explícito e depois ligar ao anfitrião e à porta do Redis. Deixe o destino por resolver se o servidor SOCKS deve resolver o nome do anfitrião.
Limite a tentativa de ligação e aplique o tempo limite de leitura pretendido. Se a ligação falhar, feche esse socket e reporte JedisConnectionException; a interface da fábrica não declara IOException verificada.
Se o Redis exigir TLS, estabeleça e verifique TLS antes de devolver o socket. Não se pode presumir que um sinalizador separado transforme um socket arbitrário devolvido pela fábrica. Para um conjunto, repita este ciclo de vida com um socket novo em cada chamada à fábrica, incluindo ligações de substituição.
Uma seleção HTTP num ProxySelector global não é uma implementação alternativa deste trabalho. O Redis envia RESP pelo seu socket; não se torna por isso HTTP nem negoceia CONNECT.