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. 小程序码的生成 - 2

    一、生成方式微信小程序提供了三个接口来生成小程序码,分别是wxacode.createQRCode()、wxacode.get()、wxacode.getUnlimited(),生成的小程序码永久有效,其中仅getUnlimited接口生成的小程序码数量暂无限制 二、接口详解1、wxacode.createQRCode参数:access_token(接口调用凭证)、path(扫码进入页面)、width(小程序码宽度)返回值:成功返回的图片Buffer,异常返回错误对象Object注意: 2、wxa

  2. c# - 存储库模式中的 IQueryable 与 IEnumerable,延迟加载 - 2

    我读过一些文章,指出IEnumerable用于模拟存储过程或限制您的数据库。失去了对外部提供商的延迟加载能力。IQueryable为开发人员提供了更大的灵active。那里有延迟加载。就性能而言,两者都消耗大量性能..那么哪个更可取? 最佳答案 从RepositoryPattern的角度,可以这样想:如果您想一次性将整个列表传递给客户端,请使用预加载IEnumerable。他们仍然可以添加linq子句,但客户端不会从延迟执行中受益。如果您希望通过允许客户端添加自己的linq子句将延迟查询功能扩展到客户端,请使用延迟加载IQuerya

  3. c# - 在浏览器中打开 PDF 而不是下载它 - 2

    我正在使用iTextSharp在单击按钮时将面板打印成PDF。单击按钮后,PDF将下载到客户的计算机上。取而代之的是,我需要在浏览器中打开PDF而不是下载。用户可以从浏览器将PDF下载到他的PC。我正在使用以下代码:Response.ContentType="application/pdf";Response.AddHeader("content-disposition","attachment;filename="+filename+".pdf");Response.Cache.SetCacheability(HttpC

  4. c# - 从 C# 访问远程目录 - 2

    我正在尝试从asp.net中的C#程序访问远程网络共享。我需要的是类似functiondownload(dirname){directory=(ThisisthepartIdon'tknowhowtodo)fordirindirectory:download(dir);forfileindirectory:copyfile(file);}我的问题是该目录需要用户名和密码才能访问,但我不知道如何提供它们。感谢您提供的任何帮助。 最佳答案 使用此类进行身份验证,而不仅仅是使用简单的文件操作:///<summary>/

  5. c# - 如何在 Web 浏览器(例如 IE)中打开 URL 并传递凭据 - 2

    我想打开一个需要基本身份验证的页面。我想将基本身份验证header与URL一起传递给浏览器。我该怎么做? 最佳答案 通过标题您可以:stringuser="uuuuuuu";stringpass="ppppppp";stringauthHdr="Authorization:Basic"+Convert.ToBase64String(Encoding.ASCII.GetBytes(user+":"+pass))+"\r\n";webBrowserCtl.N

  6. c# - 如何创建一个属性名称动态确定的匿名对象? - 2

    给定一个值数组,我想创建一个具有基于这些值的属性的匿名对象。属性名称很简单"pN"其中N是数组中值的索引。例如给定object[]values={123,"foo"};我想创建匿名对象new{p0=123,p1="foo"};我能想到的唯一方法是使用switch或if链接到合理数量的参数来支持,但我想知道是否有更优雅的方法来做到这一点:object[]parameterValues=newobject[]{123,"foo"};dynamicvalues=null;switch(parameterValues.Length

  7. c# - 如何关闭 Visual Studio 2010 中的远程调试? - 2

    我在VS2010中用WPF+C#编写的项目,当我按F5启动它时(但不是Ctrl-F5,它正常工作),程序本身开始滞后,任务管理器显示在高优先级msvsmon.exe消耗几乎所有的CPU。但是当我按下按钮、在文本框中输入等等时,它就会发生。那么如何关闭呢? 最佳答案 远程调试器也用于非远程调试场景。例如,当您的程序以64位模式运行时。VS是一个32位程序,在这种情况下它使用远程调试器来调试程序。您可以通过强制您的程序在32位模式下运行来避免它。Project+Properties,Compile选项卡,将Platformtarget设

  8. c# - 以编程方式确定 Mono 运行时版本 - 2

    以编程方式确定Mono运行时版本的推荐方法是什么?当我们的.Net应用程序与旧版本的Mono一起使用时,我们遇到了各种问题。有时我们可以解决这些问题,如果我们知道我们正在处理哪个版本,但有时我们不能。我们的解决方案是以编程方式检测Mono版本,然后我们可以透明地应用解决方法。如果Mono版本太旧,我们会提示用户升级。我们可以通过如下方式发现Mono是我们的运行时:boolisMonoRuntime=Type.GetType("Mono.Runtime")!=null;我们如何在不间接推断的情况下可靠地确定单声道版本?需要明确的是,我们需要Mono版本号,而不是.NetC

  9. c# - WPF Web 浏览器控件和 DPI 缩放 - 2

    我正在使用一个使用Web浏览器控件的WPF应用程序,但我遇到了高DPI缩放问题。看起来Web浏览器控件没有正确遵守系统的DPI设置,而WPF应用程序的其余部分正确缩放了UI。这意味着在更高的规模级别上,WPF界面变得更大,而Web浏览器内容保持原始大小,现在看起来更小了。下面是使用两个Web浏览器控件的WPF应用程序的屏幕捕获示例。100%缩放:150%缩放:请注意,在第二张图片中,相对于主要表单内容(工具栏/菜单/状态栏),Web浏览器的缩放比第一张图片小得多。有没有什么方法可以强制Web浏览器控件正确使用从应用程序继承的高DPI设置?此MSDN链接:AddressingDPIIss

  10. c# - 无法远程返回自定义 HTTP 错误详细信息 - 2

    这是一个奇怪的问题。我正在运行MVC3并有一个自定义操作结果,它包装异常并返回一条消息以及标准HTTP错误。publicclassExceptionResult:ActionResult{privatereadonlyException_exception;publicExceptionResult(Exceptionexception){_exception=exception;}publicoverridevoidExecuteResult(ControllerContextcontext){varresponse=context.HttpContext.Response;resp

随机推荐

  1. c# - 构建时 T4 转换的产品仅在下一次构建中使用 - 2

    我有一个VS项目,其中包含:在template.tt上运行TextTransform的预构建操作以生成generated.csgenerated.cs列为要编译的文件之一(即在项目文件列表中)我在构建项目时,执行了预构建Action,重新创建了generated.cs,但是VS编译的是之前版本的generated.cs(我猜它是在构建过程开始时加载到内存中的)。如何使构建使用新版本的generated.cs(即在预构建操作中生成的)?如何强制构建顺序?请注意,文本转换输入是动态的,因此无法在设计时完成。 最佳答案 我认为您不需要自定

  2. c# - 我应该如何从屏幕空间坐标转换为 WinForms PictureBox 中的图像空间坐标? - 2

    我有一个在Windows窗体PictureBox控件中显示图像的应用程序。控件的SizeMode设置为Zoom,这样PictureBox中包含的图像将以纵横比正确的方式显示,而不管PictureBox的尺寸。这对于应用程序的视觉外观非常有用,因为您可以根据需要调整窗口大小,并且图像将始终以最适合的方式显示。不幸的是,我还需要处理图片框上的鼠标点击事件,并且需要能够从屏幕空间坐标转换为图像空间坐标。看起来很容易从屏幕空间转换到控制空间,但我没有看到任何明显的方法从控制空间转换到图像空间(即在图片中缩放的源图像中的像素坐标框)。有没有一种简单的方法可以做到这一点,还是我应该复制他们在内部使

  3. c# - GDPR : Encrypted logging in C# - 2

    加密日志文件作为保护其中可能包含的个人数据的一种方法的建议很普遍。我还没有看到一个很好的引用实现,考虑到有多少公司需要它,这令人惊讶。在我们的特殊情况下,我们希望使用公钥加密,这样文件就无法在生成它们的(保护较弱的)系统上读取,并且必须被发送回我们可以查看它们的总部。到目前为止,我看到的最好的建议是“使用log4net,但使用来自BouncyCaSTLe的RFC3852流式实现来编写您自己的附加程序”。有人对此有进展吗? 最佳答案 从技术上讲,加密您的日志消息应该非常容易。使用像Serilog这样的东西你可以简单地创建一个custo

  4. c# - VS 17 打破所有异常 - 2

    VisualStudio2017(有点突然)打破所有异常。这意味着,如果我在异常设置中停用它们(在调试时按CTRL+ALT+E),调试器仍然会中断它们。我不知道这是否只是VS的一个错误,我无法更改因此不得不忍受,或者是否有一个简单的解决方案。这是异常(exception)设置窗口:异常VS中断于:顺便说一句,我也试过那个漂亮的减号(如果我按下它什么也不会发生)或添加一个不可能的条件(VS仍然在异常时中断)。我还测试了其他异常(通过简单地抛出它们),我之前停用了它们,它们也被抛出,我在其他项目中测试了同样的问题,它也出现了:我什至把所有的东西都放到了一个trycatch语句中,但VS仍然

  5. c# - 我应该在每个等待的操作上调用 ConfigureAwait(false) - 2

    我读了这篇文章https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html-但是我看到了一个矛盾:我知道UI线程死锁的问题,因为UI线程阻塞等待异步操作完成,但相同的异步操作同步到UI线程上下文-因此异步操作无法进入UI线程,因此UI线程不会停止等待。文章告诉我们解决方法是不要在UI线程上阻塞,否则您需要使用ConfigureAwait(false)everywhere:Youwouldhavetouseforeveryawaitinthetransitiveclosureofallmethodscalledb

  6. c# - dotnet 核心应用程序以管理员身份运行 - 2

    我有一个需要管理员权限才能运行的dotnet控制台应用程序。我找不到该怎么做。在常规项目中,我会添加一个app.manifest并设置<requestedExecutionLevellevel="requireAdministrator"uiAccess="false"/>但我不知道如何将它嵌入到构建中。我该怎么做? 最佳答案 我发现最简单的解决方法是添加app.manifest文件,其设置类似于netframeworkapp<requestedExecutionLevellevel

  7. c# - C# 中面向铁路的编程 - 如何编写开关函数? - 2

    我一直在关注thisF#ROParticle,并决定尝试在C#中重现它,主要是看看我是否可以。对于这个问题的长度,我们深表歉意,但如果您熟悉ROP,将很容易理解。他从F#discriminatedunion开始......typeResult<'TSuccess,'TFailure>=|Successof'TSuccess|Failureof'TFailure...我将其翻译成一个抽象的RopValue类,以及两个具体的实现(请注意,我已将类名更改为我理解得更好的名称)...publicabstractclassRopValue<TSu

  8. c# - vscode : how to setup debugging mono/c#? - 2

    我正在尝试设置VisualStudioCode(https://code.visualstudio.com/docs/debugging)以在win8上调试c#/mono。我还安装了最新版本的单声道。我向launch.json添加了一个配置并将“类型”更改为单声道(也尝试将“程序”指向调试exe)但我只是收到错误:初始化:无法为适配器ID“mono”创建调试session如何在C#项目上设置调试?编辑:似乎需要gulp脚本?CompilingC#projectswithVSCodeonUbuntu 最佳答案 VisualStudio

  9. c# - 无法在 CollectionChanged 事件期间更改 ObservableCollection - 2

    我有一个CollectionChanged事件绑定(bind)到ObservableCollection。此CollectionChanged事件然后调用另一个函数,该函数旨在使用原始集合中的项目更新另一个集合(相同类型)。我已经阅读了关于“在CollectionChanged事件期间无法更改ObservableCollection”的其他帖子,我完全理解为什么不赞成在CollectionChanged事件中修改集合以及为什么这可能会导致循环引用...但在这种特殊情况下,我没有修改原始集合,我只是将其中的一个项目添加到不相关的集合中。所以我的问题是..我在做什么有什么问题吗?我不明白如

  10. c# - 是否有一个有利于读者的 ReaderWriterLockSlim 等价物? - 2

    我一直在使用ReaderWriterLockSlim一段时间以来,它已经满足了我的需求。当我继续微调我的应用程序时,我发现ReaderWriterLockSlim对于我的用例来说略显次优。根据文档(和我的经验),它有利于作者而不是读者(即当读者和作者排队时,作者将获得优先权)。但是,我需要一个有利于读者的等价物。我了解此类组件的副作用(尤其是writer饥饿问题)。是否有人可以指出任何生产就绪的等价物?谢谢。 最佳答案 根据MSDN,ReaderWriterLockSlim支持编写器。这意味着当队列中有读者和作者时,作者将获得优先权