MAIBILAI

javascript - 如何通过浏览器确定远程服务器的延迟

coder 2024-05-09

我运行了几个游戏隧道服务器,并希望有一个页面,客户端可以在其中对所有服务器运行 ping 并找出响应最快的页面。据我所知,在 JavaScript 中似乎没有合适的方法来执行此操作,但我在想,是否有人知道在 Flash 或其他客户端浏览器技术中执行此操作的方法?

最佳答案

大多数小程序技术,包括 Javascript,都执行同源策略。动态添加 DOM 元素(例如图像)并使用 onload 事件处理程序收集计时信息是可能的。

伪代码

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

然后等待适当的时间并检查每个服务器对象的时间。根据需要重复并根据需要计算平均值。我不确定您可以期待什么样的准确性。

缺点:

  • 您可能使用了错误的工具来完成这项工作。浏览器不支持此类应用程序。
  • 这可能很不准确。
  • 如果您请求的资源被缓存,它不会给您您想要的结果,但您可以通过每次更改 url 来解决这个问题。
  • 与普通 ping 相比,这是带宽密集型的。使图像变小,例如 spacer.gif 文件。
  • 时间不仅取决于远程服务器的延迟,还取决于该服务器的带宽。这可能或多或少是一种有用的衡量标准,但请务必注意,这不仅仅是延迟。
  • 您需要能够处理来自不同服务器的 HTTP 请求,而且至关重要的是,每个服务器都应该提供完全相同的资源(或相同长度的资源)。服务器上的条件会影响响应时间,例如一台服务器是否正在压缩数据而另一台没有。

关于javascript - 如何通过浏览器确定远程服务器的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/503199/

有关javascript - 如何通过浏览器确定远程服务器的延迟的更多相关文章

  1. ruby - 如何使用正则表达式用逗号分隔字符串(括号内除外)? - 2

    我想用逗号分割一个字符串:"a,s".split','#=>['a','s']如果子字符串被括号包裹,我不想拆分它:"a,s(d,f),g,h"应该产生:['a','s(d,f)','g','h']有什么建议吗? 最佳答案 要处理嵌套括号,可以使用:txt="a,s(d,f(4,5)),g,h"pattern=Regexp.new('((?:[^,(]+|(\((?>[^()]+|\g)*\)))+)')putstxt.scan(pattern).map&:first图案细节:(#firstcapturinggroup(?:#ope

  2. objective-c - Ruby ||= Objective-C 中的等价物 - 2

    我最近一直在学习ruby​​,并且基本上爱上了||=特性,因为它可以使在ObjectiveC中编写惰性getter变得更加容易。目前我写的getter如下:-(NSArray*)myArray{if(!_myArray){_myArray=[NSArrayarray];}return_myArray}除非我遗漏了||=的某些内容,否则我将能够使用Ruby编写以前的代码:-(NSArray*)myArray{return_myArray||=[NSArrayarray];}那显然更干净了。Objective-C语言/运行时中是否有任何东西可以让您做到这一点?此外,以下是getter的单行

  3. ruby - 在 Slim 模板中,不同行的 HTML 注释在同一行呈现 - 2

    在SLIM中编写HTML注释时:/!Thefirstlineofcomments/!Thesecondlineofcomments输出变成所有其他生成的HTML格式和缩进都正确,因为我将pretty设置为true我正在编写供其他人使用的模板,因此我需要带有换行符的注释以提高可读性。 最佳答案 你可以像这样在Slim中实现单行多行注释:/!ThefirstlineofcommentsThesecondlineofcomments应该输出这个: 关于ruby-在Slim模板中,不同行的HTM

  4. ruby-on-rails - RSpec 的未定义方法 `its'(Hartl 的 Ruby on Rails 教程) - 2

    我在MichaelHartl的RoR教程第8章中遇到了问题。测试失败,因为RSpec的“它的”方法是“未定义的”。你遇到过类似的事情吗?可能是什么原因?我已经检查了一切,与书中的一样......这是我来自user_spec.rb的测试代码:describeUserdobefore{@user=User.new(name:"ExampleUser",email:"[email protected]",password:"foobar",password_confirmation:"foobar")}subject{@user}describe"remembertoken"dobefore{

  5. ruby - ruby 的反射? - 2

    我很好奇这是如何工作的。例如,如果我创建一个基于工厂模式的类,您可以在其中“注册”类供以后使用,然后执行类似FactoryClass.register('YourClassName',[param,param,...]);FactoryClass.create('your_class_name').call_method_from_this_object其中'class_name'是映射到值的散列中的键:ClassName有没有类似phpreflection的东西,我可以在哪里创建基于字符串名称的类的实例并传入参数?(在php中,参数将是它们的数组,php然后知道如何处理)所以如果我们

  6. ruby - ||之间的区别a = b 和 a = a || b 在 ruby 中? - 2

    谁能解释一下这个表达式。似乎两者相同,但实际上并非如此。a||a=bora||=b和a=a||b如果a=4和b=6,输出总是4这总是让我感到困惑和误解。有人可以解释一下吗? 最佳答案 a||a=b如果a为真,则查找a,返回a,否则a=b完成,即你将b的值赋给a。a=a||b这是一个赋值操作。在这里,您正在为a赋值,而不管它持有什么值。所以a等于a||b。在语句的第二部分,您正在寻找a。如果它的值是真值,则将其赋值回a本身,否则将b的值赋给a。长话短说a=a||b正在为a分配一个值(取决于条件),而不管它持有什么值。a||=b如果已经

  7. ruby - main :Object (NoMethodError) though method is defined 的未定义方法 - 2

    我已经使用以下代码片段定义了一个脚本:check_paramsparamdefcheck_params(param)#somecodeend当我运行它时,我得到了undefinedmethod`check_params'formain:Object(NoMethodError) 最佳答案 Ruby期望方法在你调用它之前被声明,尝试在你调用方法之前移动你的方法定义:defcheck_params(param)#somecodeendcheck_paramsparam 关于ruby-main

  8. arrays - 如何从数组中删除位于另一个数组索引处的元素 - 2

    我有两个数组,一个包含数据,一个包含索引。我想知道是否有一些好的方法可以删除indexes中给定位置的data中的元素。我可以做简单的迭代,但我想知道最短的方法是什么:data=['a','b','c','a','b','c','a','b','c']indexes=[2,5,8]//somecodeheredata中的元素在索引恰好与数组索引中的数字重合时消失。它应该看起来像这样:['a','b','a','b','a','b'] 最佳答案 data.values_at(*data.each_index.to_a-indexes)

  9. ruby-on-rails - Ruby 的 block 语法是如何工作的? - 2

    我是Ruby的新手,正在尝试理解这种语法:create_table:postsdo|t|t.string:titlet.string:contentt.string:likest.string:commentst.timestampsnull:falseend我完全理解什么这段代码在做什么,但我不明白它是如何工作的。更具体地说,我明白create_table是一个方法,:posts是一个参数,但我不明白其余的代码。 最佳答案 支持它:)create_table是一个方法。:posts是作为参数传递的符号。括号是可选的,所以它看起来很

  10. ruby - 如何序列化异常 - 2

    根据ruby-doc和apidock,您可以使用to_json和json_create序列化和反序列化异常。但是在浪费了一些时间尝试使用它们之后,我仍然没有找到办法。调用exc.to_json给我一个空哈希,Exception.json_create(hash)给我这个错误:undefinedmethod'json_create'forException:类我想我可以很容易地重新创建这些函数,因为源代码可用,但我更愿意了解我做错了什么……有什么想法吗? 最佳答案 默认情况下,JSON模块不会扩展Exception。您必须要求“jso

随机推荐