Задержка на стороне сервера - PullRequest
0 голосов
/ 07 февраля 2012

У меня вопрос по поводу передачи данных сервер - клиент. Данные отправляются клиентом после выполнения простого протокола. Но я обнаружил задержку на стороне сервера. Клиент и сервер тестируются на одном компьютере с ядром i5 с SSD и оперативной памятью 8 ГБ.

Способ, которым я измерил задержку, заключается в том, что после того, как клиенты говорят «Отправка», обе стороны записывают текущее системное время в миллисекундах. Сами данные - это текущее системное время, отправленное клиентом. Сервер проверяет, насколько это задержано на стороне сервера. Он начинается с 0 мс, увеличивается до 90 мс и стабилизируется при 40 мс. Интересно, это задержка нормальная.

Вот код сервера (многопоточный):

    ....    
        while(!ScriptWillAcessHere){

            inputLine = in.readLine();

            //Greetings
            if(i==0)
            {
                outputLine = SIMONSAYS.processInput(inputLine);
                out.println(outputLine);
            }

            if(inputLine.equals("Sending")){
                i = 1;
            }


            if(i>=1){ //Javascript will access this block    

                if(i==1){
                    StartTime = System.currentTimeMillis();
                    System.out.println(StartTime);
                    i++;
                }

                Differences = System.currentTimeMillis() - Double.parseDouble(inputLine);

                saveSvr.write(Double.toString(Differences)+"\n");
                ...
                //Checking elapsed time below:
            }
      }

Вот код клиента (однопотоковый):

            ....
            if(Client.equals("Sending"))
            {   

                while(bTimer)
                {                          
                    ins++;
                    local_time = System.currentTimeMillis();                        

                    out.println(local_time);                        

                    if(ins >= 100000)
                    {
                        out.println("End of Message");
                        break;
                    }

                }                    
            }

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2012

Этот код необходимо удалить из цикла while ().Это вызывает большой трафик ЦП и задержку на стороне сервера.

Differences = System.currentTimeMillis() - Double.parseDouble(inputLine);

Вместо этого, если кому-то нужно сравнить локальное время на стороне сервера с локальным временем клиента, сначала используйте команду ping, а затем сохраните свое местное время в начале.Передача, затем сохранить оба на сервере.

Если в концентраторе нет задержки, пинг покажет Макс.Задержка в 1 мс и оба локальных времени должны быть идентичны.

Конечно, локальное время клиента должно быть скорректировано в соответствии с временем сервера;вот почему нам нужно сохранить их местное время в начале передачи, чтобы найти смещение.

Кроме того, если сервер одновременно выполняет какую-то другую задачу, должна быть некоторая задержка около 10-15Миз.Если сама передача не имеет задержки, Макс.задержка этой операции должна совпадать с внутренней задержкой сервера.Я обнаружил, что сервер также выполнял разные задачи одновременно и имел Макс.Задержка 15 мс, вызванная ими.Итак, общая задержка на сервере:

Общая задержка = внутренняя задержка сервера для других задач + внутренняя задержка сервера в потоке передачи + задержка передачи.

...