使用 ajax 和 webapi 进行长轮询有什么好处...它会杀死我的服务器吗?和字符串比较

2024-02-29

我有一个非常简单的长轮询 ajax 调用,如下所示:

(function poll(){
    $.ajax({ url: "myserver", success: function(data){
        //do my stuff here

    }, dataType: "json", complete: poll, timeout: 30000 });
})();

我今天下午刚刚拿起这个例子,它看起来效果很好。我正在使用它在我的页面上构建一些 html,据我所知,它几乎是即时的。我有点担心这会让工作线程在我的服务器上保持打开状态,如果服务器上的负载太大,它会完全停止。有人可以阐明这个理论吗?在后端,我有一个 webapi 服务 (.net mvc 4),它调用数据库、构建对象,然后将对象传回。在我看来,为了使其工作,服务器必须不断调用数据库......这不太好,对吗???

我的下一个问题是客户端确定是否需要更新页面上的 html 的最佳方法是什么?目前,我正在使用 JSON.stringify() 将我的对象转换为字符串,并将该字符串与旧字符串进行比较,如果存在增量,它会重写页面上的 html。现在还没有完整的内容对象中的很多东西都下来了,但它可能会变得非常大,我认为进行字符串比较对客户端来说可能是相当资源密集的......特别是如果它几乎不断地这样做的话。

对我来说,底线是这样的:我不确定轮询的工作时间有多长。我只是用谷歌搜索并找到了上面的示例代码并实现了它,从表面上看,它很棒。我只是担心它会让事情陷入困境(在服务器上)并且我将旧结果与新结果进行比较的方式将使事情陷入困境(在客户端上)。

我们非常感谢您提供的任何及所有信息。

TIA.


好的,我的两分钱:

  1. 正如其他人所说,SignalR 是经过尝试和测试的代码,因此我真的会考虑使用它,而不是编写自己的代码。
  2. SignalR 确实更改了一些 IIS 设置以针对此类工作优化 IIS。因此,如果您想实现自己的,请查看在 SignalR 中完成的 IIS 设置更改 https://github.com/SignalR/SignalR/wiki/Performance
  3. 我想您正在进行长轮询,以便您的服务器可以实现某种形式的服务器推送。请记住,这将将无状态 HTTP 机器变成有状态机器如果你想扩展,这不太好。负载均衡器后面的长轮询并不好 :) 对我来说,这是服务器推送最糟糕的事情。
  4. ASP.NET 使用 ThreadPool 来处理请求。长轮询将占用 ThreadPool 线程。如果你有太多这样的线程,你可能会陷入线程匮乏(和眼泪)的境地。作为一个大概数字,100 并不算太多,但+1000 就已经太多了。
  5. 甚至 SignalR 团队也表示针对 SingalR 进行了优化的 IIS 框可能并未针对普通 ASP.NET 进行了优化,因此他们建议将这些框分开。所以这意味着成本和开销。

最后,我建议使用长轮询如果您正在解决业务问题(并不是因为它很酷)因为这样就可以支付其成本、管理费用和头痛。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ajax 和 webapi 进行长轮询有什么好处...它会杀死我的服务器吗?和字符串比较 的相关文章

随机推荐

  • 为 MVC 应用程序添加尾部斜杠

    我正在构建一个基于 MVC 设计模式的应用程序 我希望我的 URL 如下 http example com page action http example com page action 我成功地让它与下面的代码一起工作 但如果 URL
  • 如果我要将文件内容读入数组,是否需要初始化数组?

    我正在初始化buf在立即用以下内容重写其内容之前不必要地全为零read exact fn parse
  • 在 Python 代码中使用 Git 命令

    我被要求编写一个脚本 从 Git 中提取最新代码 进行构建并执行一些自动化单元测试 我发现有两个内置的 Python 模块可以随时使用 用于与 Git 交互 GitPython and libgit2 我应该使用什么方法 模块 更简单的解决
  • 在输入类型=“文本”中键入时跟踪 onchange 的最佳方法?

    在我的经验中 input type text onchange事件通常仅在您离开后发生 blur 控制 有没有办法强制浏览器触发onchange每次textfield内容变化 如果不是 那么 手动 跟踪这个最优雅的方法是什么 Using o
  • 在 Razor 中将视图模型属性编码为 JavaScript

    我有一个简单的视图模型 public class IndexViewModel public bool ShowWelcomeMsg get set 在我看来 我需要 JS 中的这个属性 但这是不正确的 因为它输出False代替false但
  • 使用PyQt5嵌入动态条形图

    我在 python 中编写了以下代码 以在生成的 GUI 中显示条形图PyQt5 import sys from PyQt5 QtWidgets import QDialog QApplication QPushButton QVBoxLa
  • Libgdx ModelBuilder.createRect 仅从一侧可见

    在我的第一个 libgdx 3D 游戏中 我现在从createBox to createRect 仅创建可见面 如果一堵墙位于另一堵墙的左侧 则其右面不可见 我正在创建 4 个模型 frontFace backFace rightFace
  • 如何在React-native ListView中过滤数据?

    我正在尝试过滤数组对象列表 然后尝试使用新的数据源在 ListView 中显示 但是 该列表并未被过滤 我知道我的过滤功能工作正常 我在console log中检查过 我正在使用 Redux 将状态映射到 prop 然后尝试过滤道具 这是错
  • SignalR 和序列化对象数组

    我是 SignalR 的新手 并且已经完成了一个简单的测试 hack 我希望用类型化对象序列化对象数组 默认情况下 SignalR 已将 Json NET 序列化器配置为不提供类型信息 我发现我可以通过以下方式在 DependencyRes
  • 无法执行操作。计算替代解决方案,可能需要一段时间 STS?

    我想问一下添加新的时候出现这个错误是什么意思Available Software Site并使用 Eclipse STS Spring Tool Suite 安装新软件Install New Software 我遇到这个问题Spring T
  • 使用 new(Integer) 与 int

    在我的 Java 课上 教授使用了类似的内容 integerBox add new Integer 10 这和刚刚做的一样吗 integerBox add 10 我用谷歌搜索了一下 但找不到一种方法或另一种方法 而且教授也很含糊 我能找到的
  • 查找特殊字符之间的文本并替换字符串

    例如我有一个字符串包含 String s test string 67 Hi 我想得到这个字符串 67 有了星星 我就可以开始替换那部分字符串了 我现在的代码如下所示 String s test string 67 Hi s s subst
  • 如何拦截和抑制 TFrame 子组件的消息?

    我需要拦截WM PASTE message https stackoverflow com questions 10158861 how to intercept detect a paste command into a tmemo 10
  • Java/JSP WEB-INF/类无法导入

    自从我不得不做一些 Java JSP 以来已经有一段时间了 我在 WEB INF classes MyClass java 中有一个 java 类 Netbeans 中的构建成功 我可以在类文件夹中看到 MyClass class 在我的j
  • MariaDB Connector/Python 需要 MariaDB Connector/C >= 3.2.4,发现版本 3.1.14

    Ubuntu 20 04 需要版本 3 2 4 否则 pip3 install mariadb 是不可能的 pip3 install mariadb gt Collecting mariadb Using cached mariadb 1
  • 摇动后停止 Android 加速计

    我想听一下摇晃声 然后完全停止加速度计并转到另一项活动 遗憾的是我没有找到任何方法来做到这一点 即使我计算一个变量并使用简单的 如果 进行检查 每次检测到震动时它总是会再次加载新的活动 请帮助我解决我的不理解 Override protec
  • 加权随机图

    假设我有一个大的二维数组 其值范围在 0 1 范围内 其中 0 表示 不可能 1 表示 极有可能 如何根据上述概率在该数组中选择一组随机点 看待问题的一种方法是 暂时 忽略您正在处理二维网格的事实 你拥有的是一组加权的项目 从这样的集合中随
  • 有没有办法使用 JQuery GetJSON 方法从外部页面获取 HTML?

    假设您正在尝试执行 jquery ajax 请求 例如 ajax url http other website com 据我了解 由于同源原则 这个请求会失败 因为URL是外部域 不过我听说过GetJSON 不遵守此原则 可以使用 JSON
  • 如何从 Python 文件更新 Qml 对象的属性?

    我想在 Qml 中显示一个矩形 并且想从我的 python 代码中更改矩形的属性 宽度 长度 实际上 Python代码中有一个套接字连接 通过该连接从另一台计算机接收宽度和长度的值 简单地说 另一个用户应该能够实时调整这个矩形 我知道如何在
  • 使用 ajax 和 webapi 进行长轮询有什么好处...它会杀死我的服务器吗?和字符串比较

    我有一个非常简单的长轮询 ajax 调用 如下所示 function poll ajax url myserver success function data do my stuff here dataType json complete