How to determine latency of a remote server through the browser

后端 未结 9 723
暖寄归人
暖寄归人 2020-12-17 15:41

I run a couple of game tunnelling servers and would like to have a page where the client can run a ping on all the servers and find out which is the most responsive. As far

9条回答
  •  时光说笑
    2020-12-17 16:03

    Most applet technology, including Javascript, enforces a same-origin policy. It may be possible to dynamically add DOM elements, such as images, and collect timing information using the onload event handler.

    Psuedo-code

    for (server in servers) {
      var img = document.createElement('IMG');
      server.startTime = getCurrentTimeInMS();
      img.onload=function() { server.endTime = getcurrentTimeInMS(); }
      img.src = server.imgUrl;
    }
    

    Then wait an appropriate time and check the timing for each server object. Repeat as needed and compute averages if you want. I'm not sure what kind of accuracy you can expect.

    Disadvantages:

    • You are probably using the wrong tool for the job. A browser is not equipped for this sort of application.
    • It's probably quite inaccurate.
    • If the resource you request is cached it won't give you the results you want, but you can work around that by changing the url each time.
    • This is bandwidth-intensive compared to a normal ping. Make the image tiny, such as a spacer.gif file.
    • The timing depends not only on the latency of the remote server but the bandwidth of that server. This may be a more or less useful measure but it's important to note that it is not simply the latency.
    • You need to be able to serve HTTP requests from the various servers and, crucially, each server should serve the exact same resource (or a resource of the same length). Conditions on the server can affect the response time, such as if one server is compressing the data and another isn't.

提交回复
热议问题