服务器端延迟

时间:2012-02-06 20:51:31

标签: multithreading client delay

我有一个关于服务器 - 客户端数据传输的问题。满足简单协议后,客户端发送数据。但我发现服务器端存在延迟。客户端和服务器在具有带有SSD和8 GB RAM的i5内核的同一台PC上进行测试。

我测量延迟的方式是,在客户端说“发送”之后,双方以毫秒为单位写入当前系统时间。数据本身是客户端发送的当前系统时间。服务器正在检查服务器端的延迟程度。它从0 ms开始,增加到90 ms并稳定在40 ms。我想知道这种延迟是正常的。

这是服务器的代码(多线程):

    ....    
        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 :(得分:0)

必须从while()循环中删除此代码。它会导致大量的CPU流量和服务器端的延迟。

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

相反,如果有人需要将服务器端本地时间与客户端本地时间进行比较,请先使用ping,然后在传输开始时保存本地时间,然后将两者保存在服务器中。

如果集线器没有延迟,ping将指示Max。延迟1 ms,两个本地时间必须相同。

当然,必须根据服务器时间调整客户端的本地时间;这就是我们需要在传输开始时保存当地时间以找到偏移量的原因。

此外,如果服务器同时执行某些不同的任务,则必须在10-15 ms左右出现一些延迟。如果传输本身没有任何延迟,则Max。此操作的延迟必须与服务器内部延迟相同。我发现服务器也在同时运行不同的任务并且有Max。由它们引起的15 ms延迟。因此,服务器上的总延迟是:

总延迟=服务器内部延迟其他任务+服务器内部延迟传输线程+传输延迟。