服务器端延迟
问题描述:
我有一个关于服务器 - 客户端数据传输的问题。数据在满足简单协议后由客户端发送。但是我发现服务器端存在延迟。客户端和服务器在具有带SSD和8 GB RAM的i5内核的同一台PC上进行测试。服务器端延迟
我如何测量延迟的方式是,在客户端发送“发送”之后,双方以毫秒为单位写入当前系统时间。数据本身就是客户端发送的当前系统时间。服务器正在检查它在服务器端延迟了多少。它从0ms开始,增加到90ms,稳定在40ms。我不知道这个延迟是否正常。
这里是服务器的(多线程)的代码:
....
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;
}
}
}
谢谢,
答
这代码必须从while()循环中移除。它会导致大量的CPU流量和服务器端的延迟。
Differences = System.currentTimeMillis() - Double.parseDouble(inputLine);
相反,如果有人需要服务器端的本地时间来比较客户端本地时间,用ping对方先然后保存其本地时间传输的开始,然后在服务器节省。
如果集线器没有延迟,ping将会指示最大。 1毫秒延迟,并且两个本地时间必须相同。
当然,客户端的本地时间必须根据服务器时间进行调整;这就是为什么我们需要在传输开始时保存当地时间以找到偏移量。
此外,如果服务器在同一时间执行一些不同的任务,则必须有一些延迟约10-15毫秒。如果传输本身没有任何延迟,此操作的延迟必须与服务器内部延迟相同。我发现服务器也同时运行不同的任务,并有Max。由它们造成15毫秒的延迟。因此,在服务器上的总延迟是:在传输线+传输延迟其他任务
总延迟=服务器内部延迟+服务器内部延迟。
OK,**上有Double.parseDouble性能问题()在while()循环。**我删除此代码,将其改为saveSvr.write(inputLine)和他们不同的项目进行比较。他们是相同的,没有延迟。 – user1098761 2012-02-06 23:24:02
如果这确实解决您的问题,请张贴它作为一个答案,也可以肯定只要时间允许_accept_它。 – 2012-02-09 05:07:50