Vielen Dank erstmal an Alle die mir letztes mal geholfen haben. Die gute Nachricht ist das Programm macht im Prinzip was es soll - es holt mir von den verschiedenen Cryptobörsen den Betrag für das günstigste Angebot. Das Problem ist aber die Performance - Anfragen an die selbe Börse über unterschiedliche Coins werden jedesmal einzeln gestellt(sprich erst Verbindungsaufbau Anfrage z.B. bei anycoindirect Preis für Bitcoin dann wartet das Programm auf Feedback dann hole ich die Daten für Ethereum usw. usv. ) d.h. entweder müsste ich eine große Anfrage an den Server stellen statt jedesmall dieses Frage-Antwort Spiel oder wenn das nicht möglich sein sollte erstmal lauter kleine Anfragen parallel versenden und wenn dann die Antworten kommen diese entsprechend zuordnen. Was vielleicht auch einen Performancegewinn verspricht sind verschiedene Threads sprich für jede Kryptobörse einen Thread. Das sind zumindest die Gedankenspiele die ich mir gemacht habe.
Gedankenspiele sind das eine aber wie man so etwas konkret umsetzt ja wieder etwas völlig anderes weswegen ich wie jeder erstmal gegoogelt habe um mir Anreize zu holen:
https://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html
https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
https://www.foreach.be/blog/parallel-and-asynchronous-programming-in-java-8
Hier mal der Code wie ich bisher die Daten beziehe als Parser habe ich diesen hier eingesetzt:
https://github.com/fangyidong/json-simple
Hat jemand Erfahrung wie ich besagtes Performanceproblem lösen kann?
Gedankenspiele sind das eine aber wie man so etwas konkret umsetzt ja wieder etwas völlig anderes weswegen ich wie jeder erstmal gegoogelt habe um mir Anreize zu holen:
https://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html
https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
https://www.foreach.be/blog/parallel-and-asynchronous-programming-in-java-8
Hier mal der Code wie ich bisher die Daten beziehe als Parser habe ich diesen hier eingesetzt:
https://github.com/fangyidong/json-simple
Code:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
// für Bitcoin
URL url1 = new URL("https", "anycoindirect.eu",
"/api/public/buyprices?CoinCode=BTC&FiatCode=EUR&CoinAmount=1");
// für Ethereum
URL url2 = new URL("https", "anycoindirect.eu",
"/api/public/buyprices?CoinCode=ETH&FiatCode=EUR&CoinAmount=1");
// für Litecoin
URL url3 = new URL("https", "anycoindirect.eu",
"/api/public/buyprices?CoinCode=LTC&FiatCode=EUR&CoinAmount=1");
try (BufferedReader in = new BufferedReader(new InputStreamReader(url1.openStream())))
{
String inputLine;
System.out.println("/***** File content Bitcoin *****/n");
while ((inputLine = in.readLine()) != null)
{
// System.out.println(inputLine);
JSONParser parser = new JSONParser();
JSONObject obj2 = (JSONObject) parser.parse(inputLine);
JSONArray lang = (JSONArray) obj2.get("Data");
// @SuppressWarnings("rawtypes")
Iterator i = lang.iterator();
while (i.hasNext())
{
JSONObject innerObj = (JSONObject) i.next();
System.out.println(innerObj.get("FiatAmount"));
anycoinbtc = (double) innerObj.get("FiatAmount");
break;
}
}
} catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException ioe)
{
ioe.printStackTrace(System.err);
}
try (BufferedReader in = new BufferedReader(new InputStreamReader(url2.openStream())))
{
String inputLine;
System.out.println("/***** File content Ethereum *****/n");
while ((inputLine = in.readLine()) != null)
{
// System.out.println(inputLine);
JSONParser parser = new JSONParser();
JSONObject obj2 = (JSONObject) parser.parse(inputLine);
JSONArray lang = (JSONArray) obj2.get("Data");
// @SuppressWarnings("rawtypes")
Iterator i = lang.iterator();
while (i.hasNext())
{
JSONObject innerObj = (JSONObject) i.next();
System.out.println(innerObj.get("FiatAmount"));
anycoineth = (double) innerObj.get("FiatAmount");
break;
}
}
} catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException ioe)
{
ioe.printStackTrace(System.err);
}
try (BufferedReader in = new BufferedReader(new InputStreamReader(url3.openStream())))
{
String inputLine;
System.out.println("/***** File content Litecoin *****/n");
while ((inputLine = in.readLine()) != null)
{
// System.out.println(inputLine);
JSONParser parser = new JSONParser();
JSONObject obj2 = (JSONObject) parser.parse(inputLine);
JSONArray lang = (JSONArray) obj2.get("Data");
// @SuppressWarnings("rawtypes")
Iterator i = lang.iterator();
while (i.hasNext())
{
JSONObject innerObj = (JSONObject) i.next();
System.out.println(innerObj.get("FiatAmount"));
anycoinltc = (double) innerObj.get("FiatAmount");
break;
}
}
} catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException ioe)
{
ioe.printStackTrace(System.err);
}
Hat jemand Erfahrung wie ich besagtes Performanceproblem lösen kann?