Network programming 远程测量运行时间

Network programming 远程测量运行时间,network-programming,timing,Network Programming,Timing,我有一个程序,测量学生完成任务所需的时间。 该项目连接到互联网,时间最短的学生可以在网站上获得奖励 考虑到PC可能会错误地测量时间(我见过这种情况发生),或者学生可能会预加载共享库以拦截操作系统调用并给出虚假时间,因此需要在服务器端执行计时 目前我的逻辑是这样的: 客户端向服务器发出启动信号 服务器记录时间并将ACK发送回客户端 客户端在收到ACK后启动任务 客户端完成任务并向服务器发送通知 服务器记录时间并计算经过的时间 问题是,这包括从服务器发送ACK到客户端接收ACK的延迟+客户端完成到服

我有一个程序,测量学生完成任务所需的时间。 该项目连接到互联网,时间最短的学生可以在网站上获得奖励

考虑到PC可能会错误地测量时间(我见过这种情况发生),或者学生可能会预加载共享库以拦截操作系统调用并给出虚假时间,因此需要在服务器端执行计时

目前我的逻辑是这样的:

  • 客户端向服务器发出启动信号
  • 服务器记录时间并将ACK发送回客户端
  • 客户端在收到ACK后启动任务
  • 客户端完成任务并向服务器发送通知
  • 服务器记录时间并计算经过的时间
  • 问题是,这包括从服务器发送ACK到客户端接收ACK的延迟+客户端完成到服务器接收消息的延迟。如果延迟为400ms,任务长度为6s,则它占总时间的很大比例


    当学生或电脑可能不可信时,有没有更好的方法来测量任务的时间?

    有些比赛要求学生或竞争对手将其二进制程序(或源代码)上传到您的服务器,您可以控制服务器。你可以这么做。特别是,如果是学生代码,您可能需要上传源代码,并限制为某些API,例如,在
    chroot
    -ed环境中运行它。

    学生应该在尽可能短的时间内回答10道quickfire数学题-它们不会生成结果二进制或无法工作的代码。也许你可以在学生的浏览器中使用Javascript进行操作?不幸的是,使用Javascript,用户可以非常轻松地更改所发生的事情,例如调用自己的方法、停止调用方法等。这不会使计时非常可靠。