რა უნდა დააბრუნოს Jedis-ის SOCKS სოკეტის ფაბრიკამ
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-ზე არ მოლაპარაკებს.