问题标签 [flow-control]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 延迟javascript流程
我正在使用 javascript 和 AJAX。我打电话给服务器进行登录。它发送一个登录是真的响应。然后我需要通过再次调用服务器来收集有关用户的所有信息。如果我立即拨打电话,服务器将返回用户未登录的响应。我可以使用 setTimeout(myFunction(), 1000) 或 setInterval(myFunction(), 1000); 拨打第二个电话。我想知道,是否有一种干净的方法可以在不运行其余代码的情况下继续等待正确的响应?我想我最大的问题是,如果不将所有内容都放入回调响应中,我怎么能做到这一点?我希望代码有点模块化。
hornetq - 使用 HornetQ/STOMP 的基于窗口的流控制
我想知道在使用 HornetQ/STOMP 时如何从队列中提取一条消息。
根据这个http://docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/flow-control.html#d0e4023,似乎可以通过consumer-window-size在HornetQ 的 JMS api 的情况,称为基于窗口的流控制。
但是,互联网上的一些帖子表明使用STOMP客户端是不可能的:
- https://developer.jboss.org/thread/160106?tstart=0
- https://developer.jboss.org/thread/156748?start=15&tstart=0
- https://developer.jboss.org/message/912048#912048
在我看来,“消费者窗口大小”是一个服务器端设置,可以全局应用于所有连接。然后,如果我对所有连接都没有缓冲(consumer-window-size = 0)没问题,是否可以通过在服务器端进行配置来强制执行它,即使是 STOMP 客户端?或者,当前的 Hornet STOMP 支持根本不可能像上面的帖子所暗示的那样为 STOMP 客户端提供非缓冲连接?(即,即使我在服务器端设置了非缓冲连接,STOMP 客户端也无法使用?)
相比之下,ActiveMQ/STOMP 似乎通过此处描述的“prefetchSize”使其可配置每个连接来支持这一点:http: //activemq.apache.org/stomp.html
c++ - c ++除非用于流控制的包装器构造
我有一个类似于以下内容的程序部分:
每个函数都应该返回一个整数,表示它是否运行成功,比如int ret_val=0
是否成功int ret_val=1
。
我想知道是否存在任何可以连续处理每个函数的包装器构造,只要ret_val == 0
. 在我的情况下,它也应该调用X->updateD();
,而不管ret_val
.
现在我有:
我认为这不是真正可读的。我更喜欢类似于 while 循环的东西,尽管它必须在每次函数调用后检查条件。类似这样的东西:
有没有这样的构造?
rabbitmq - 如何确保永远不会触发 RabbitMQ 中的流量控制?
我有一个发布者以比消费者可以消费的稍大的速度推入队列。对于少量的消息,还可以,但是对于非常多的消息,RabbitMQ 开始将其写入磁盘。在某个时间点,磁盘变满,触发流控。从那时起,利率真的很慢。有没有办法在集群节点之间减少或分担这种负载?我应该如何设计我的应用程序以便永远不会触发流量控制?我在三个具有 13G RAM 和 10G 系统磁盘空间的节点上使用 RabbitMQ 3.2.3 - 通过集群相互连接。其中两个是 RAM 节点,剩下的一个是磁盘节点,也用于 RabbitMQ 管理插件。
sockets - 当数据发送速度快于处理速度时,套接字将如何工作?
我不太清楚 TCP 和套接字的一些细节机制。
一个客户端通过 TCP 连接到服务器,并向服务器发送数据。如果发送速度远大于处理速度会怎样?比如客户端每秒发送1MiB,而服务器每秒只能处理1 KiB,会不会导致系统内存崩溃?
我知道套接字 API 中有接收缓冲区大小设置:
- 如果我设置了缓冲区大小但数据泛滥怎么办?
- 如果我不设置接收缓冲区大小怎么办?
c++ - boost::asio::serial_port set RTS DTS
I have a serial device and I want to control the RTS and DTR signal during the communication. Basicly the whole communication is based on this two signals. Is there a way to use the boost::asio::serial_port implementation under linux to do this. Is there any way to get the underlying structures boost uses to control both signals?
I found under boost/asio/impl/serial_port_basis.ipp
boost also defines # define BOOST_ASIO_OPTION_STORAGE termios
javascript - `x = x.then()` 在 Promise 中做了什么?
我正在尝试理解一些具有新颖的承诺方法的代码:
这与正常的链式.then
方法有何不同?使用安全吗?
collections - 使用 Mule 和集合聚合器对不完整数据集进行数据处理
我需要收集和处理由另一个组织生成的文件集。为简单起见,假设该集合由两个文件组成,一个摘要文件和一个详细文件,名称如下:SUM20150701.dat 和 DTL20150701.dat,这将构成日期为 20150701 的集合。问题是,集合需要按顺序处理,并且从外部组织传输文件可能容易出错,从而可能丢失文件。如果发生这种情况,则应保留该文件集,找到的任何以下文件集也应保留。例如,在 mule 进程开始时,源文件夹中可能包含:SUM20150701.dat、SUM20150703.dat、DTL20150703.dat。也就是说,20150701 的数据集是不完整的,而 20150703 是完整的。我需要保留两个数据集,直到 DTL20150701.dat 到达,然后按顺序处理它们。
在我的 mule 进程的这种简化形式中,会监视源文件夹中的文件。找到后,它们将被移动到存档文件夹并使用日期作为序列和相关值传递给集合聚合器。当一组完成时,它被移动到目标文件夹。在收集器上使用长时间超时以确保不处理不完整的集合:
如果所有集合都完整,这将正确处理按顺序找到的集合。它正确地等待不完整的集合被填充,但不保存后续集合,即在上面的示例中,集合 20150703 将处理,而 20150701 仍在等待 DTL 文件。
如果存在未完成的较早集合,是否存在强制集合聚合器元素等待的设置或其他构造?
我将文件名的日期部分用于相关性和序列 ID,如果所有集合都完成,它确实可以按照我想要的顺序控制集合过程。如果日期不存在(如本例中的 20150702)并不重要,只需按顺序处理现有文件并且集合必须完整。
python - FT232RL 上的流量控制
我有一个 FT232RL 芯片。我将它用于 USB 到 RS232 协议的转换,我需要转换数据并进一步使用它。
无法配置我正在使用的“数据集”(另一侧的设备,如调制解调器,在我的情况下为 MAX485 IC )。我只能给它一个读取或写入的控制信号。所以它不是很有用。
我的应用程序要求我能够在发送数据时将其设置为“写入模式”,然后在完成发送后,我需要能够将其设置为“读取模式”以接收它生成的响应信号.
注意:控制信号是简单的 HIGH 或 LOW 数据可以是几个字节
我认为做到这一点的一种方法是能够读取 RS232 传输缓冲区中有多少数据。一旦变为“0”,所有数据都将被传输,我可以将控制引脚设置为“读取模式”
另一种方法是使用 FLOW CONTROL
为了清楚起见,我想在陈述我的问题之前解释我对流量控制的理解:
(1) 我通过 Python 将数据通过 USB 发送到 ftdi
(2) ftdi 需要在 DTR 线上写一个 HIGH
(3) 在 DSR 线上接收到 HIGH,它需要开始传输(这是假设我禁用了 rts/cts 流控制设置)
(4) 发送完成后,需要在 DTR 线标记发送端写一个 LOW
问题是我无法让 DTR 线按预期打开和关闭步骤 (2) 没有发生
我什至尝试了以下方法:
这仍然不能解决我的完整问题。
请指教
编辑:我需要提一下,我正在使用的 FT232RL 位于 nex-robotics 的分线板上,我可以访问的引脚是:3.3V、5V、CD、RXD、TXD、DTR、GND、DSR、RTS、 CTS 和 RI,当然还有一个用于将其连接到我的笔记本电脑的 USB 端口
EDIT2:我可以使用 Mprog 3.5 或类似的软件来刷新可以支持我想做的 EEPROM 吗?如果是,如何?
python - 除了 elifs 之外,在 python 中是否有一种不那么垂直的方式来执行选择案例?
所以我可以在 python 中做一个 Select Case
有时我使用使用索引作为选择器的列表。
但这使得列表中的每个项目在被选中之前都要被处理,对吗?
所以我想知道是否有其他方法可以做到这一点,而无需跨越这么多垂直来控制执行的代码。有没有办法跳转到部分代码?也许我不想解决一个函数,而只是跳过一些行。
谢谢