Привет, ребята, у меня есть клиент, который хотел бы проверить варианты на своем веб-сайте. У них есть 5 миллионов URL для проверки. Если бы я должен был отправлять запросы / пинги синхронно, это заняло бы у меня 23 дня. Итак, я ищу многопоточное решение. Первоначально я начал эту проблему с Python, но не заметил особых улучшений / не смог хорошо масштабироваться, поэтому здесь я нахожусь в Java, и если это тоже не удастся, я попробую Go, прежде чем бросать в полотенце.
Проблема в том, что я не вижу никаких улучшений с многопоточностью. Возможно, я неправильно его реализую, может ли кто-нибудь мне помочь? этого поста, чтобы увидеть, как я справился с проблемой.
Это предложение сокета, терпит неудачу, когда я пытаюсь запустить его в потоке, тоже не уверен, что я здесь делаю неправильно.
Основной класс:
package com.company;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
public class Main extends Thread{
public static void main(String[] args) throws IOException {
long startTime = System.nanoTime();
Helpers.get("www.google.com", 80); // works here
String path = "test.txt";
boolean append = true;
for (int x = 0; x < 1; x++) {
ArrayList<String> urls = new ArrayList<String>();
// when x = 0, y = 0 | 10 /\ when x = 1, y = 10 | 20
for (int y= x * 10;y < ((x + 1) * 10); y++){
urls.add(String.format("www.google%d.com/", y)); // doesn't work here
}
Thread thread = new Thread(new Helpers(path, append, urls, 80));
thread.start();
thread.interrupt();
}
long endTime = System.nanoTime();
long duration = TimeUnit.NANOSECONDS.toMillis(endTime - startTime);
System.out.println(duration + " ms");
}
}
Класс помощников:
package com.company;
import java.io.IOException;
import java.net.*;import java.io.FileWriter;
import java.io.PrintWriter;import java.util.ArrayList;
public class Helpers extends Thread{
public Helpers(String path, boolean append, ArrayList<String> urls, int port) throws IOException {
this.run(path, append, urls, port);
}
public void run(String path, boolean append, ArrayList<String> urls, int port) throws IOException {
for (String url : urls) {
String status = Helpers.get(url, port);Helpers.writeToFile(path, append, status);
System.out.println(status);
}
}
public static String get(String url, int port) throws IOException {
try {
Socket conn = new Socket(url, 80);
conn.close();
return url + " | Success";
}catch (UnknownHostException error){return url + " | Failed";
}
}