我有一个关于服务器 - 客户端数据传输的问题。满足简单协议后,客户端发送数据。但我发现服务器端存在延迟。客户端和服务器在具有带有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;
}
}
}
谢谢,
答案 0 :(得分:0)
必须从while()循环中删除此代码。它会导致大量的CPU流量和服务器端的延迟。
Differences = System.currentTimeMillis() - Double.parseDouble(inputLine);
相反,如果有人需要将服务器端本地时间与客户端本地时间进行比较,请先使用ping,然后在传输开始时保存本地时间,然后将两者保存在服务器中。
如果集线器没有延迟,ping将指示Max。延迟1 ms,两个本地时间必须相同。
当然,必须根据服务器时间调整客户端的本地时间;这就是我们需要在传输开始时保存当地时间以找到偏移量的原因。
此外,如果服务器同时执行某些不同的任务,则必须在10-15 ms左右出现一些延迟。如果传输本身没有任何延迟,则Max。此操作的延迟必须与服务器内部延迟相同。我发现服务器也在同时运行不同的任务并且有Max。由它们引起的15 ms延迟。因此,服务器上的总延迟是:
总延迟=服务器内部延迟其他任务+服务器内部延迟传输线程+传输延迟。