Zeit Optimierung - bzw. ms Optimierung

F

Funkeyfreak

Aktives Mitglied
Hey,

ich habe mal ein kleines Programm geschrieben welches zu einer bestimmten Zeit auf eine bestimmte Fläche klicken soll.
Das Programm funktioniert, soweit so gut. Jedoch habe ich Abweichungen von bis zu 110 Millisekunden, was relativ viel ist (für den Zweck den das Programm erfüllen soll).

Ich habe den Delay meines Pings zu den jeweiligen Server implementiert, wodurch die Server Anfrage abgedeckt werden soll. Ich habe den Delay und die Abweichung von dem Zeit Server, welcher benutzt wird, implementiert. (Die Abweichung von meiner Uhr bzw der Java Uhr zu der Uhr des Zeit Servers).
Natürlich die Delays und Abweichungen zusammengerechnet und dieser Wert wird dann von dem Klick Zeitpunkt abgezogen.

Hat jemand Tipps oder Vorschläge wie man die Abweichungen so kurz wie nur irgendwie möglich machen kann?

Code:
package Timen;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;


public class timeclick {
   
    //The task which you want to execute
    private static class MyTimeTask extends TimerTask
    {

        public void run()      
        {
            Robot bot;
            try {
                bot = new Robot();
                bot.mouseMove(611, 529);
                bot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                bot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
               
            } catch (AWTException e) {
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
           
        }
    }

    public static void main(String[] args)throws Exception {
               
         // create the ping command as a list of strings
        timeclick ping = new timeclick();
         List<String> commands = new ArrayList<String>();
         commands.add("ping");
         commands.add("111.222.33.4");
         double latencyToServer=ping.doCommand(commands);
     
       
       
         NTPUDPClient client = new NTPUDPClient();
         client.open();
         // use host name or IP address of target NTP server
         InetAddress hostAddr = InetAddress.getByName("pool.ntp.org");
         TimeInfo info = client.getTime(hostAddr);
         info.computeDetails(); // compute offset/delay if not already done
         Long offsetValue = info.getOffset();
         Long delayValue = info.getDelay();
         String delay = (delayValue == null) ? "N/A" : delayValue.toString();
         String offset = (offsetValue == null) ? "N/A" : offsetValue.toString();

         System.out.println(" Roundtrip delay(ms)=" + delay
                         + ", clock offset(ms)=" + offset); // offset in ms
         client.close();
        //convert String into int
        int latencyToServer1 = (int)latencyToServer;
        int delayUhr=Integer.parseInt(delay);
        int uhrOffset = Integer.parseInt(offset);
        int allDelays= latencyToServer1+delayUhr+uhrOffset;
        System.out.println("Alle Unterschiede: "+allDelays);
       
       
           
         //the Date and time at which you want to execute  
        DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date date;
        try {
            date = dateFormatter.parse("2020-08-28 23:51:50.000");
            System.out.println ("aktuelle zeit " + dateFormatter.format(date));
            Calendar calendar1 = Calendar.getInstance();
            calendar1.setTime(date);
            calendar1.add(Calendar.MILLISECOND, -allDelays);
            date = calendar1.getTime();
            System.out.println ("neue zeit     " + dateFormatter.format(date));
            //Now create the time and schedule it
            Timer timer = new Timer();

            //Use this if you want to execute it once
            timer.schedule(new MyTimeTask(), date);
           
            //Use this if you want to execute it repeatedly
            //int period = 10000;//10secs
            //timer.schedule(new MyTimeTask(), date, period );
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
       
       
      }

      public double doCommand(List<String> command)
      throws IOException
      {
        String s = null;

        ProcessBuilder pb = new ProcessBuilder(command);
        Process process = pb.start();
        Process process1 = pb.start();

        BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedReader stdInput1 = new BufferedReader(new InputStreamReader(process1.getInputStream()));
        BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
       
       

       
        // read the output from the command
        System.out.println("Here is the standard output of the command:\n");
        while ((s = stdInput.readLine()) != null)
        {
          System.out.println(s);
        }
     
       
        // read any errors from the attempted command
        System.out.println("Here is the standard error of the command (if any):\n");
        while ((s = stdError.readLine()) != null)
        {
          System.out.println(s);
        }
   
        //get the average latency
        System.out.println("here is the average latency :\n");      
        double latency = 0.0;
        while ((s = stdInput1.readLine()) != null)
        {
            if (s.contains("Mittelwert")) {
                String timeWithValue = s.split(" = ")[2];
                String value = timeWithValue.split("ms")[0];
                latency = Double.parseDouble(value);
                System.out.println("latency " + latency);
            }
         
        }
        return latency;
       



     
    }
   
}


PS: Bitte nicht wundern ich habe hier als Beispiel Google angepingt deswegen kann der Zeit Server eventuell nicht stimmen. Der Zeit Server meines eigentlichen "Ziels" ist aber pool.ntp.org.
 
mihe7

mihe7

Top Contributor
welches zu einer bestimmten Zeit auf eine bestimmte Fläche klicken soll.
Das Programm funktioniert, soweit so gut. Jedoch habe ich Abweichungen von bis zu 110 Millisekunden, was relativ viel ist (für den Zweck den das Programm erfüllen soll).
Abweichungen wirst Du beim Timer immer haben und hart auf die Millisekunde geht sowieso nicht, 110 ms sind aber viel zu hoch. Allerdings frage ich mich, woher Du die Abweichung wissen willst, da Du die nirgends misst. Dazu müsstest Du am Anfang von run() wenigstens die aktuelle Systemzeit ausgeben, um eine ungefähre Einschätzung zu bekommen.

Unabhängig davon wäre die Frage: was bitte hat ein Zeitserver damit zu tun?!? Was hast Du denn eigentlich vor? Bei eBay am Ende der Auktion automatisch klicken, oder was?
 
B

BestGoalkeeper

Bekanntes Mitglied
was bitte hat ein Zeitserver damit zu tun?
Das habe ich mich auch gefragt, aber unabhängig davon gibt es natürlich auch einen Algorithmus für die Zeitsynchronisation...

Btw. Die Adresse "111.222.33.4" führt mich nach Hong Kong, genauer gesagt nach Shenzhen.
 
F

Funkeyfreak

Aktives Mitglied
Also ich stelle mit "date = dateFormatter.parse("2020-08-28 23:51:50.000");" die Zeit ein wann geklickt werden soll. Dann ermittel ich den Unterschied zwischen meiner Uhr und der Uhr des Zeit Servers mit welcher die Website, auf welcher ich klicken möchte, synchronisiert ist.

Somit sollten nun die Uhren synchronisiert sein - bzw. es nur noch minimale Abweichungen geben.
Dann ermittel ich die Latenz (Ping) von meinem PC zu dem Server der Website.

Nun habe ich die Latenz zum Server und eine synchronisiert Uhr. Sofern ich diese Delays bzw. Abweichungen addiere und von der eingestellten Zeit "23:51:50.000" abziehe, sollte ich eigentlich meine Klickzeit bekommen - mit dieser sollte ich dann theoretisch eine sehr geringe Abweichung haben.
Durch Testen habe ich herausgefunden dass die maximale Abweichung 110ms und die durchschnittlich Abweichung 95ms sind.

Der Sinn des Programmes ist, dass dieses mit Berücksichtung der Latenz und dem Unterschied der Uhr, genau dann dort klickt wie ich es eingestellt habe. (bot.mouseMove(611, 529); etc.)
D.h. wenn ich nun die Koordinaten eines Button einstelle, welcher zu einer bestimmten Zeit angeklickt werden soll bzw. die Server Anfrage zu einer bestimmten Zeit eingehen soll, dann soll dies auch so exakt wie möglich passieren.
 
F

Funkeyfreak

Aktives Mitglied
Ich habe das Programm auf den Button drücken lassen und dann kriege ich eine "Ankunftszeit" angezeigt.
Diese Ankunftszeit hatte eine maximale Abweichung von 110ms und eine durchschnittlich Abweichung von 95ms.

Insgesamt habe ich nur 20 Testungen durchgeführt, jedoch sind dies sehr hohe Abweichungen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Die Ankunftszeit wird wie gemessen?

95ms zu früh oder zu spät?


Mal getestet, zu welchem Zeitpunkt der Klick lokal ausgelöst wird? Einfach nur um zu sehen, ob der Timer zu langsam ist
 
F

Funkeyfreak

Aktives Mitglied
Bei der Ankunftszeit kann man lediglich sehen was für eine Differenz es zwischen Klicken und eigentlicher Anfrage zum Server gab. Dass man diese nicht auf 0ms bekommt ist mir klar, aber 100ms sind schon viel.
4mal (-28,-12,-33,-15) zu früh und sonst immer zu spät (88,69,108,103,120,102,106,122,105,84,87,84,88,69)

Wie kann ich testen wann der Klick lokal ausgelöst wird? Habe dass bis jetzt einfach an den Abweichungen gemessen. 4 mal zu früh und 16 mal zu spät, d.h. wesentlich öfter zu spät als zu früh. Aber wirklich schlau werde ich daraus nicht wirklich
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Bei der Ankunftszeit kann man lediglich sehen was für eine Differenz es zwischen Klicken und eigentlicher Anfrage zum Server gab.
Aber wie wird denn die Ankunftszeit berechnet? Bekommt man die vom Server zurück, wenn man die Anfrage stellt?
oder ist das der Zeitpunkt, an dem man lokal die Antwort vom Server bekommt?


Wie kann ich testen wann der Klick lokal ausgelöst wird?
Einfach ein print mit der aktuellen Zeit (und halt der geplanten Zeit uU der Differenz)
 
B

BestGoalkeeper

Bekanntes Mitglied
Wegen Zeitsynchronisation...
Wenn du die vorletzte Zeile der main einkommentierst dann wird die Systemzeit neu gesetzt.
Code:
		<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
		<dependency>
			<groupId>commons-net</groupId>
			<artifactId>commons-net</artifactId>
			<version>3.7</version>
		</dependency>
Java:
	public static void main(String[] args) throws IOException {
		ArrayList<long[]> infos = new ArrayList<>();
		NTPUDPClient client = new NTPUDPClient();
		for (int i = 0; i < 10; i++) {
			TimeInfo time = client.getTime(InetAddress.getByName("time.google.com"));
			long t1 = System.currentTimeMillis();
			infos.add(new long[] { time.getReturnTime(), t1, time.getReturnTime() - t1 });
		}
		for (long[] info : infos) {
			System.out.println(info[0] + " " + info[1] + " " + info[2]);
		}
		System.out.println(infos.stream().mapToLong(i -> i[2]).average().getAsDouble());
		SimpleDateFormat format = (SimpleDateFormat) DateFormat.getTimeInstance();
		format.applyPattern("HH:mm:ss");
		String timeToSet = format.format(new Date(
				System.currentTimeMillis() + Math.round(infos.stream().mapToLong(i -> i[2]).average().getAsDouble())));
		//Runtime.getRuntime().exec("cmd /C time " + timeToSet); // hh:mm:ss
		System.out.println(timeToSet);
	}
Bei mir bringt das nur nicht viel weil meine Systemzeit aktuell ist und ich es damit verschlimmern würde:
1598714872725 1598714872727 -2
1598714872745 1598714872745 0
1598714872764 1598714872764 0
1598714872783 1598714872783 0
1598714872802 1598714872802 0
1598714872822 1598714872822 0
1598714872842 1598714872842 0
1598714872861 1598714872861 0
1598714872880 1598714872880 0
1598714872898 1598714872898 0
-0.2
17:27:52
Daher sei bitte nochmal die Frage gestattet ob du das wirklich unbedingt brauchst... oder ob nicht die Systemzeit ausreicht.
 
F

Funkeyfreak

Aktives Mitglied
@mrBrown die Anfrage wird gestellt und dann setzt der Server automatisch die Ankunftszeitfest, d.h. es gibt keine Rückmeldung vom Server. Lediglich die Server Anfrage ist wichtig, weswegen die Serverzeit in Form von pool.ntp.org miteinbezogen werden muss.
Wenn man diese nicht miteinbeziehen würde, würde man ja die Serverzeit außer vor lassen, was zu einer noch größeren Abweichung führen würde.
Oder liege ich falsch?

@BestGoalkeeper Also wenn ich meine Systemzeit auf die pool.ntp.org Zeit setzen kann, dann brauche die Anfrage zum Zeitserver nicht, aber Java nimmt ja die Systemzeit und nicht die eingestellte Zeit über: Ausführen-timedate.cpl-Internetzeit-Einstellungen ändern-pool.ntp.org
D.h. das abändern der "Lokalezeit" würde in diesem Fall ja nichts bringen und wie man die Systemzeit auf die pool.ntp.org Zeit setzt weiß ich leider nicht. Deswegen habe erstelle ich die Abfragen zum Zeitserver.
 
Zuletzt bearbeitet:
F

Funkeyfreak

Aktives Mitglied
Ich habe mal gelesen dass es ne Hardwarte Zeit gibt oder eher gesagt eine Motherboard Zeit oder wie auch immer die heißt, an welcher sich java richtet und ne computerzeit die man unten rechts sieht.

Wenn dass kompletter schwachsinn ist dann vergesst es ^^
 
B

BestGoalkeeper

Bekanntes Mitglied
Das ist richtig. Es gibt nur eine (Hardware/Mainboard) Zeit. Alle anderen lokalen Zeiten können davon abgeleitet werden...
> Most advanced computers like PCs have a Real Time Clock which can store the actual calendar time and date but is not often used for timing operations.
> In answer to your question:
> locating the timer on the hardware board we have

Man könnte zum Beispiel die CMOS Batterie für 10 Sekunden entfernen und die Zeit würde zurückgestellt werden:
> As Jeet Lodaya has said, it will cause all of the custom changes to the ROM BIOS (date and time are only two of them) to resort back to the factory settings.

Bin aber nicht sicher, ob das heutzutage immer noch so ist.

Also alles in allem hast du etwas zu kompliziert gedacht. ;)
 
D

Dukel

Top Contributor
Das OS holt sich die Zeit vom Rechner (Mainboard) und setzt diese aber auch.
Applikationen (z.B. Java) bekommen vom OS die Zeit. D.h. Hier muss man sich keine Gedanken über verschiedene Zeiten machen.
 
F

Funkeyfreak

Aktives Mitglied
Ah ok, dann muss ich meine lokale Zeit einfach mit dem Zeitserver (in meinem Fall pool.ntp.org) synchronisieren und dann nur noch die Latenz zum Server berechnen und abziehen richtig?

Habe ich jetzt einfach mal getan und nach 10 Testversuchen habe ich eine Abweichung zwischen 290-300ms feststellen können (maximal 10ms zu früh, nie zu spät). D.h. ich werde meine eingestellte Zeit -300ms rechnen und dann sollte ich eine max Abweichung von 10ms (zu früh) erreichen.

Danke für die Hilfe :D
 
F

Funkeyfreak

Aktives Mitglied
Ok, habe jetzt mal soweit es geht angepasst. Bin jetzt bei einer Abweichung von durchschnittlich +/- 20ms.
Ich habe 10 Testversuche durchgeführt, dabei kamen diese Werte herum: -18,17,-17,-17,28,1,17,22,-21,32 (Abweichungen in ms)

Jemand eine Idee wie man dass noch besser hinbekommen kann oder ist dass schon das optimale?

Um ehrlich zu sein frage ich mich auch warum bei den ersten Testversuchen eine max Abweichung von 5ms gab, aber nach der Optimierung die Abweichungen immer größer werden.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Jemand eine Idee wie man dass noch besser hinbekommen kann oder ist dass schon das optimale?
Dafür müsste man wissen, woran die Abweichung liegt, und ob die von deiner Seite aus überhaupt verringerbar ist.

deshalb mein Tipp, mal zu gucken wie genau denn der Timer bei dir arbeitet, gut möglich, dass der nicht genau genug ist (bzw sogar ziemlich sicher), in dem Fall könnte man es optimieren.

Um ehrlich zu sein frage ich mich auch warum bei den ersten Testversuchen eine max Abweichung von 5ms gab, aber nach der Optimierung die Abweichungen immer größer werden.
Naja, dann waren die Optimierungen wohl das Gegenteil einer Optimierung ;)
 
F

Funkeyfreak

Aktives Mitglied
Dafür müsste man wissen, woran die Abweichung liegt, und ob die von deiner Seite aus überhaupt verringerbar ist.

deshalb mein Tipp, mal zu gucken wie genau denn der Timer bei dir arbeitet, gut möglich, dass der nicht genau genug ist (bzw sogar ziemlich sicher), in dem Fall könnte man es optimieren.


Wie genau mache ich dass?
Ich habe ja den Timer gestellt und habe exakt die selbe Zeit wie der Server (gleicher Zeit Server ausgewählt). Die Latenz wird vom Timer abgezogen und danach wurde nur noch manuell um 65 Millisekunden Optimiert.
Da überhaupt manuell Optimiert werden musste gehe ich auch stark davon aus dass es irgendwo Abweichungen gibt die man noch verbessern kann, aber derzeit weiß ich nicht wie man diese finden kann.
 
F

Funkeyfreak

Aktives Mitglied
Geht eig um ein Uni Projekt welches ich schon mal vorbereiten oder eher gesagt testen möchte ob ich dies überhaupt hin bekomme.

Die Latenz ist ja die Abweichung von meinem PC zu dem Server, also würde ich behaupten dass diese abgezogen werden muss. Ansonsten würde ich ja die doppelte Latenz haben oder nicht?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Lass dir die aktuelle Zeit und die gewünschte Zeit und deren Differenz ausgeben, wenn der TimerTask gestartet wird.
 
F

Funkeyfreak

Aktives Mitglied
Mhhh irgendwie ist dass komisch - der Timer wird richtig berechnet aber nun musste ich diesen wieder um 600ms manuell korrigieren.
D.h. es gibt irgendeinen variablen Wert welchen ich noch nicht berücksichtigt habe, aber ich habe keine Ahnung welchen.
 
B

BestGoalkeeper

Bekanntes Mitglied
Die Latenz ist ja die Abweichung von meinem PC zu dem Server, also würde ich behaupten dass diese abgezogen werden muss
Ok, sagen wir es gibt Seite A und Seite B. A kann beim Senden seines Pakets nicht wissen, wie hoch die Latenz ist. Also sendet A nur seine aktuelle Zeit. B muss zu dieser Zeit die Latenz addieren und kann dann die neue Zeit setzen.
Über das HH:mm:ss Format gehen dir natürlich die Millisekunden verloren :( Vielleicht ist das das Problem, denn keine Latenz beträgt 1 Sekunde...
 
F

Funkeyfreak

Aktives Mitglied
Ich benutze das yyyy-MM-dd HH:mm:ss.SSS Format - also sind die Millisekunden berücksichtigt. Außerdem wird die Latenz als Millisekunde erfasst und kann daher doch eig ganz normal abgezogen werden.

Code:
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Das komische ist nur dass wenn ich NUR die Latenz addiere bzw. subtrahiere, dass ich dann immer dieselben werte bekomme als Abweichung (also max. 5ms Abweichung) und wenn ich dann weiter anpasse weil es eine Abweichung von 400ms noch gibt (-> also Terminzeit -400ms) dann gibt es größere Abweichungen.
Es kommt mir echt so vor als würde ich irgendeine variable vergessen aber ich finde einfach nichts
 
mihe7

mihe7

Top Contributor
Also, ich verstehe das Problem immer noch nicht. Du hast einen Timer, den Du auf eine bestimmte Zeit einstellst.

1. Frage: wie groß ist die Abweichung beim Eintritt in die Methode des durch den Timer ausgeführten Tasks?

In dieser Methode verwendest Du Robot, um einen Mausklick auszuführen.

2. Frage: wie groß ist die Abweichung am Ende der Methode des durch den Timer ausgeführten Tasks?

Durch den Mausklick wird ein Request an den Server geschickt.

3. Frage: wie groß ist die Abweichung am Server und wann wird diese gemessen?

Wenn am Server die Ankunftszeit gemessen wird, entspräche das in etwa der Latenzzeit, wobei auch eine mehr oder weniger geringe Verarbeitungszeit des Servers enthalten ist.

Messung des Pings funktioniert via IP/ICMP und damit ohne den TCP-Overhead. Gemessen wird dabei auch nicht die Latenz-, sondern die Paketumlaufzeit (Round Trip Time, RTT) wobei keineswegs gesagt ist, dass die Pakete in beiden Richtungen die gleichen Wege nehmen (Latenzzeit ist also im Allgemeinen nicht RTT/2).

Bei TCP wird zum Verbindungsaufbau ein Handshake durchgeführt: Client sendet SYN-Paket, worauf der Server mit einem SYN/ACK antwortet, das wiederum vom Client mit einem ACK, gefolgt von Datenpaketen bestätigt wird. Der erste Teil wäre noch etwa mit einem IP-Request/ICMP-Response-Zyklus (-> RTT) vergleichbar, der schon einmal flöten geht. Der Server erhält das Datenpaket also frühestens nach RTT zzgl. einer unbekannten Latenzzeit, die aber geringer als RTT ausfallen dürfte. Hinzu kommt die Verarbeitungsdauer.

Jetzt rechnen wir mal zusammen. Sofern ein Verbindungsaufbau notwendig ist, würden bis zur Messung der Ankunftszeit am Server also Abweichung Timer + Dauer Verarbeitung Client + RTT (Verbindungsaufbau) + Latenz + Übertragung Daten + Verarbeitungszeit Server zu berücksichtigen. Kann sein, dass ich noch was vergessen/übersehen habe. Die Zeit für den Verbindungsaufbau entfällt ggf. bei folgenden Anfragen.

Kurz: die benötigte Zeit ist schon etwas länger als der Ping.
 
B

BestGoalkeeper

Bekanntes Mitglied
@mihe7 Ich habe die Vermutung,
kriege ich eine "Ankunftszeit" angezeigt.
dass es um dieses Spiel geht: https://www.seekampf.de . Das hab ich auch mal gespielt (damals hieß es noch Inselkampf) und dann wäre es an für sich ganz einfach...
1. Zeit mit der vom Server angezeigten Zeit synchronisieren.
2. Das relativ kleine Fenster zwischen der Ankunftszeit des Cleaner und der Ankunftszeit des Kolo nutzen, meist ist das nur 1 Sekunde, um die Flotte rauszuschicken und zurückzuholen.
3. Nicht mit Java und nicht mit Robot dieses Problem lösen. ;)
 
F

Funkeyfreak

Aktives Mitglied
1. Frage: wie groß ist die Abweichung beim Eintritt in die Methode des durch den Timer ausgeführten Tasks?

In dieser Methode verwendest Du Robot, um einen Mausklick auszuführen.
Dort gibt es keine Abweichung. Ich habe mir die ausführ Zeit nach setzen des Datums und der Zeit anzeigen lassen und kurz bevor der Robot ausgeführt wird. Beide male gab es keine Abweichung.

2. Frage: wie groß ist die Abweichung am Ende der Methode des durch den Timer ausgeführten Tasks?

Durch den Mausklick wird ein Request an den Server geschickt.

Wie kriege ich diese Abweichung? Mit einem Post request? Habe sowas in der Art schon einmal gemacht aber ich habe keine Ahnung wie von einer Website die nötigen Information finde bzw. die nötigen Informationen um ein Post request zu erstellen.

3. Frage: wie groß ist die Abweichung am Server und wann wird diese gemessen?

Wenn am Server die Ankunftszeit gemessen wird, entspräche das in etwa der Latenzzeit, wobei auch eine mehr oder weniger geringe Verarbeitungszeit des Servers enthalten ist.
Also hier Latenzzeit/2 als Annäherung. Ist halt nicht exakt aber genauer geht es nicht oder?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Wie kriege ich diese Abweichung? Mit einem Post request? Habe sowas in der Art schon einmal gemacht aber ich habe keine Ahnung wie von einer Website die nötigen Information finde bzw. die nötigen Informationen um ein Post request zu erstellen.
@mihe7 dürfte gemeint haben, einfach am Ende des TimerTasks noch mal die aktuelle Zeit ausgeben lassen.
 
F

Funkeyfreak

Aktives Mitglied
Nein, wie gesagt geht es um ein Uni Projekt. Seafight habe ich ganz ganz früher mal gespielt als Darkorbit etc. noch angesagt waren.
Habe das Spiel seit mehr als 10 Jahren nicht mehr angefasst ^^
 
F

fhoffmann

Top Contributor
Ganz dumme Frage:
Du schreibst:
Java:
double latencyToServer = ping.doCommand(commands);
int latencyToServer1 = (int)latencyToServer;
Bist du sicher, dass bei dem Cast von double zu int keine Information verloren geht (z.B. die Millisekunden)?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
K CET-Zeit benutzen Allgemeine Java-Themen 6
K Geschätze Zeit implementieren Allgemeine Java-Themen 14
Blender3D AWT Fehlerhafte Zeit bei Calender und Date DateFormat Allgemeine Java-Themen 8
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
O Java Hardware Software Zeit Allgemeine Java-Themen 7
H Bestimmte Aufgaben zur bestimmter Zeit/ in bestimmten Intervallen Allgemeine Java-Themen 3
F Zeit ermitteln Allgemeine Java-Themen 2
Q Zeit in GUI selbst aktualisieren Allgemeine Java-Themen 5
D Klassen Zeit aus NMEA-Stream in SimpleDateFormat Allgemeine Java-Themen 17
M AudioClip in Spiel mehrfach in kurzer Zeit abspielen Allgemeine Java-Themen 3
N java.util.Date - Zeit auf 00:00 setzen Allgemeine Java-Themen 3
R Raum und Zeit Allgemeine Java-Themen 11
S Zeit Allgemeine Java-Themen 4
Z zeit zwischen maus drücken und loslassen Allgemeine Java-Themen 7
T Methodenparameter zur Compile-Zeit überprüfen Allgemeine Java-Themen 8
J Lizenz auf Zeit Allgemeine Java-Themen 8
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
prakdi Zeit zum Durchlauf der Schleifen unverständlich!? Allgemeine Java-Themen 3
A JavaVM Zeit Windows 7 Allgemeine Java-Themen 9
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
C Leerzeilen verbrauchen Zeit! Allgemeine Java-Themen 5
J Datum und Zeit Allgemeine Java-Themen 4
data89 Zeit-Diagramm erstellen Allgemeine Java-Themen 11
G JComboBox getSelectedItem Zeit Allgemeine Java-Themen 5
Kr0e Sekunden -> Zeit Allgemeine Java-Themen 14
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
J zeit überscheidungen ermitteln Allgemeine Java-Themen 6
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
A Compilierdatum/Zeit in Code eingenerieren Allgemeine Java-Themen 13
Kidao Wie ordne ich die aktuelle Zeit in einer Zeitreihe eine? Allgemeine Java-Themen 6
J zeit stoppen Allgemeine Java-Themen 11
M Zeit eines rechners im netzwerk ermitteln Allgemeine Java-Themen 6
B Aktuelle Zeit im Format YYYY-MM-DD HH-MM-SS in Logfile schre Allgemeine Java-Themen 8
C Umrechnung der Zeit Allgemeine Java-Themen 8
B 2 JList instanzen wo nur einer zur selben Zeit selektierbar? Allgemeine Java-Themen 8
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
P Zeit messen Allgemeine Java-Themen 16
M Zeit läuft rückwärts Allgemeine Java-Themen 3
K Thread Safe Zeit Messung Allgemeine Java-Themen 2
D Programmunterbrechung für eine bestimmte Zeit (Millisikunden Allgemeine Java-Themen 10
K ServerSocket benötigt unmengen an Zeit Allgemeine Java-Themen 7
D Zeit messen Allgemeine Java-Themen 2
G try auf zeit Allgemeine Java-Themen 8
R Garbage Collector rennt die ganze Zeit Allgemeine Java-Themen 7
M Fortschritt: verbleibende Zeit errechen. Allgemeine Java-Themen 2
F Zeit errechnen mit GregorianCalendar Allgemeine Java-Themen 8
F vergangene Zeit berechnen Allgemeine Java-Themen 6
A Unix Zeit Allgemeine Java-Themen 2
D Datum und Zeit - Date, Calendar oder GregorianCalender ? Allgemeine Java-Themen 13
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
C Vergangene Zeit seit Anwendungsstart messen Allgemeine Java-Themen 5
T Zeit aufaddieren Allgemeine Java-Themen 3
T zeit in java Allgemeine Java-Themen 4
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
R Optimierung beim Vergleichen von 2 Bildern Allgemeine Java-Themen 23
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
K Optimierung kürzester Weg im Warenlager Allgemeine Java-Themen 8
O Algorithmus Optimierung Allgemeine Java-Themen 3
H Optimierung durch Threads Allgemeine Java-Themen 31
C Programmflow-Optimierung Allgemeine Java-Themen 7
G Klasse Optimierung Allgemeine Java-Themen 6
N Optimierung einer Berechnung Allgemeine Java-Themen 17
S jdk versus openjdk - Optimierung von Konstanten? Allgemeine Java-Themen 8
P Optimierung (&& ||) deaktivieren / umgehen? Allgemeine Java-Themen 9
G Optimierung StringBuilder Allgemeine Java-Themen 9
S Optimierung vom Laden von Grafiken Allgemeine Java-Themen 4
S Brainstorming --> Optimierung vonn Gefälleplatten Allgemeine Java-Themen 8
D Optimierung beim Casten Allgemeine Java-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben