- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个堆栈(作为数组实现),其中包含当套接字可用时发出的 HTTP 请求,并且事件套接字的数量受到限制。我想扩展它,以便每个主机有最大数量的套接字(以及最大总套接字数量,但这并不是特别涉及我的问题)。
因此队列应该继续按照接收顺序进行处理。但是,当然,如果队列中下一个请求的主机已达到最大套接字数,则将无法为其提供服务,因此应采用队列中未达到最大套接字数的下一个主机.
我查看了使用 Priority Queue ,用一个比较器来检查主机上可用的最大套接字,但这并不能真正完成工作。我想获取队列中可以服务的下一个,而不是根据套接字可用性作为优先级指标重新排序队列。
我考虑过每个主机都有一个队列,但是很难维持原来的顺序。
我正在考虑有一个队列,每个项目上的主机的属性,以及一个遍历队列的例程,直到找到第一个具有可用套接字的队列,然后通过拼接将其出队。这保持了原始顺序,但似乎效率低下。
所以我正在考虑将这些方法与类似的方法结合起来(使用“order”属性维护整个队列):
const queues = [
{
host: 'www.example.org',
queue: [
{ order: 1 },
{ order: 3 }
]
},
{
host: 'www.example.com',
queue: [
{ order: 2 },
{ order: 4 },
{ order: 5 }
]
}
];
通过上述方法,当每个请求被添加到其主机的适当队列中时,都会将顺序属性添加到每个请求中。然后,每次需要新项目时,可以根据其第一个项目的顺序值对主机队列集进行排序。那么对下一项的检查只需要在每个主机上运行一次,而不是每次扫描整个队列。
最佳答案
我过去为网络爬虫做过类似的事情。
我有一个 Host
类,其中包含有关主机的信息:名称、最大并发请求数、当前事件请求数、其 robots.txt 文件的副本、有关其历史记录的统计信息(我向它发出的请求数量、平均响应速度、错误率等)以及其他特定于主机的信息。
我还有一个请求优先级队列。每个请求结构都有要访问的 URL 以及对相应 Host
实例的引用。优先级键是基于 URL 值(由此处并不真正相关的机器学习算法计算)的优先级值和时间的组合。
当我从队列中删除请求时,我要做的第一件事就是检查主机
以查看是否有可用的套接字。如果没有,我将使用现在的时间值 + 主机的平均请求时间重新排队请求。
这很有效,尽管一些非常繁忙的主机的 URL 往往会经常被回收。
我尝试了主机优先级队列。每个主机都有一个队列或 URL。还有一个超时列表:当前由于各种原因而处于“超时”状态的主机字典,但主要是因为没有可用的套接字,或其 URL 队列为空。其工作原理如下:
主机将从优先级队列中删除,并发出请求。如果主机仍然有可用的套接字,那么我会将其添加回队列。如果没有,它将进入超时队列。无论哪种情况,当请求完成时,主机的可用套接字数量都会增加,主机从超时列表中删除并重新插入优先级队列。
这种方法看起来很有希望。当项目由于其他原因被取消时,我们正在对其进行测试。
关于javascript - 基于属性的动态限制队列的数据结构/算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59459953/
我有一个 ServiceBusQueue(SBQ),它获取大量消息负载。我有一个具有 accessRights(manage) 的 ServiceBusTrigger(SBT),它不断轮询来自 SBQ
在下面给出的结果集中,有 2 个唯一用户 (id),并且查询中可能会出现更多此类用户: 这是多连接查询: select id, name, col1Code, col2Code, col2Va
我正在用 Python 2.7.3 编写一个带有 GRequests 的小脚本和 lxml 可以让我从各种网站收集一些收藏卡价格并进行比较。问题是其中一个网站限制了请求的数量,如果我超过它,就会发回
我想知道何时实际使用删除级联或删除限制以及更新级联或更新限制。我对使用它们或在我的数据库中应用感到很困惑。 最佳答案 在外键约束上使用级联运算符是一个热门话题。 理论上,如果您知道删除父对象也将自动删
下面是我的输出,我只想显示那些重复的名字。每个名字都是飞行员,数字是飞行员驾驶的飞机类型。我想显示驾驶不止一架飞机的飞行员的姓名。我正在使用 sql*plus PIL_PILOTNAME
我正在评估不同的移动框架,我认为 nativescript 是一个不错的选择。但我不知道开发过程是否存在限制。例如,我对样式有限制(这并不重要),但我想知道将来我是否可以有限制并且不能使用某些 nat
我正在尝试使用 grails 数据绑定(bind)将一些表单参数映射到我的模型中,但我认为在映射嵌入式集合方面可能存在一些限制。 例如,如果我提交一些这样的参数,那么映射工作正常: //this wo
是否可以将 django 自过滤器起的时间限制为 7 天。如果日期超过 7 天,则不应用过滤器 最佳答案 timesince 的源代码位于 django/django/utils/timesince.
我想在我的网站上嵌入一个 PayPal 捐赠按钮。但问题是我住在伊朗——这个国家受到制裁,人们不使用国际银行账户或主要信用卡。 有什么想法吗?请帮忙! 问候 沮丧 最佳答案 您可以在伊朗境内使用为伊朗
这是我的查询 select PhoneNumber as _data,PhoneType as _type from contact_phonenumbers where ContactID = 3
这个问题在这里已经有了答案: What is the maximum number of parameters passed to $in query in MongoDB? (4 个答案) 关闭
我的一个项目的 AndroidManifest.xml 变得越来越大(> 1000 行),因为我必须对某些文件类型使用react并且涵盖所有情况变得越来越复杂。我想知道 list 大小是否有任何限制。
在使用 Sybase、Infomix、DB2 等其他数据库产品多年后使用 MySQL 5.1 Enterprise 时;我遇到了 MySQL 不会做的事情。例如,它只能为 SELECT 查询生成 EX
这个问题在这里已经有了答案: What is the maximum number of parameters passed to $in query in MongoDB? (4 个回答) 关闭5年
通常我们是在{$apache}/conf/httpd.conf中设置Apache的参数,然而我们并没有发现可以设置日志文件大小的配置指令,通过参考http://httpd.apache.org/do
我正在搜索最大的 Android SharedPreferences 键值对,但找不到任何好的答案。其次,我想问一下,如果我有一个键,它的字符串值限制是多少。多少字符可以放入其中。如果我需要频繁更改值
我目前正在试验 SoundCloud API,并注意到我对/tracks 资源的 GET 请求一次从不返回超过 200 个结果。关于这个的几个问题: 这个限制是故意的吗? 有没有办法增加这个限制? 如
我正在与一家名为 Dwolla 的金融技术公司合作,该公司提供了一个 API,用于将银行信息附加到用户并收取/发送 ACH 付款。 他们需要我将我的 TLS 最低版本升级到 1.2(禁用 TLS 1.
我在 PHP 中有一个多维数组,如下所示: $array = Array ( [0] => Array ( [bill] => 1 ) [1] => Array ( [
我在获取下一个查询的第一行时遇到了问题: Select mar.Title MarketTitle, ololo.NUMBER, ololo.Title from Markets mar JOIN(
我是一名优秀的程序员,十分优秀!