问题标签 [event-based-programming]
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.
functional-programming - 是否存在基于异步事件的编程语言?
我有一些时间考虑了一种基于事件的编程语言。我的意思是一种语言,当您更改因变量时,每个变量都会更新。例如,考虑以下终端应用程序的伪代码:
按 enter 将打印b的值。但结果将仅在前五秒内为10 ,因为之后a将更新为10并且在接下来的五秒内b将等于15,因为b取决于a。
这个概念当然会带来一些问题,但它也提供了一些好处。例如,想象一个 GUI 应用程序(通常用事件编程),它显示两个输入框和两个数字相加的结果:
它可以通过以下方式编程:
而已。它有点像 excel,但有真正的编程。有这样的编程语言吗?或者类似的东西?
servlets - servlet 容器中的网关/反向代理实现
我正在尝试使以下模型成为“非阻塞 IO”模型。流动:
- servlet过滤器拦截并做一些业务(认证、授权、包装请求)
- 根据请求方法,使用 apache http 客户端(库)进行进一步的服务请求
- http客户端给出响应并将其发送给调用者
servlet 3 规范中的 AsyncContext 虽然解决了需求,但仍然需要创建工作线程。
从第二步到第三步有没有办法使用netty(作为servlet容器内的可插入组件)?因此,一旦服务响应进入第三步,netty 组件是否会在没有 servlet 容器的情况下写入客户端?
或者有没有办法在netty中编写servlet过滤器?apache HttpAsyncClient 在这里是一个不错的选择吗?
或者对当前方法有什么设计建议?
asynchronous - 什么是 Thrift 事件库以及它是如何实现的?
我开始使用 thrift,但我找不到关于 thrift 基本架构的好文档。我唯一知道的是我们必须将事件排队到 eventBase 中。谁能解释更多关于 Thrift EventBase 的信息?
apache - 为什么 Apache Event MPM 表现不佳?
Event MPM 与 Nginx 的设计并不完全相同,但显然是为了让 keepalives 更稳定并更快地发送静态文件而设计的。我的理解是 Event MPM 有点用词不当,因为:
- 虽然连接是传给kqueue/epoll,
- 某些非常重要的模块,例如 mod_gzip 和 mod_ssl 将阻塞/消耗一个线程,直到响应完成,
- 这是大文件的问题,但可能不是 PHP 生成的 HTML 文档等。
不幸的是,Apache 不断失去市场份额,大多数基准测试都对 MPM 事件不利。基准测试是否存在缺陷,或者事件 MPM 对 Nginx 的表现真的很差?即使有这些限制,在正常流量(非恶意)和较小文件下,它应该与 Nginx 有一定的竞争力。例如,通过 php-fpm 在慢速连接上提供 PHP 生成的文档应该是有竞争力的,因为文档将被缓冲(即使是 ssl'd 和 gzip'd)并异步发送。使用压缩或不使用压缩的 SSL 和非 SSL 连接的工作方式与 Nginx 在此类工作负载上的工作方式没有明显不同。
那么为什么它没有在各种基准测试中大放异彩呢?它出什么问题了?或者基准有什么问题?一个主要网站是否使用它来呼吁它可以执行的权威?
amazon-web-services - 将 Amazon SQS 与多个使用者一起使用
我有一个基于服务的应用程序,它使用带有多个队列和多个使用者的 Amazon SQS。我这样做是为了实现基于事件的架构并解耦所有服务,其中不同的服务对其他系统的状态变化做出反应。例如:
- 注册服务:
- 新用户注册时发出事件“registration-new”。
- 用户服务:
- 更新用户时发出事件“用户更新”。
- 搜索服务:
- 从队列“registration-new”中读取并在搜索中索引用户。
- 从队列“用户更新”中读取并更新搜索中的用户。
- 指标服务:
- 从“registration-new”队列中读取并发送到 Mixpanel。
- 从队列“用户更新”中读取并发送到 Mixpanel。
我有很多问题:
- 轮询时可以多次收到一条消息。我可以将很多系统设计为幂等的,但对于某些服务(例如指标服务)而言,这将更加困难。
- 需要从 SQS 的队列中手动删除一条消息。我曾想过实现一个“消息处理服务”,它在所有服务都收到消息时处理消息的删除(每个服务在处理消息后都会发出一个“消息确认”事件)。
我想我的问题是:我应该使用什么模式来确保我可以为 SQS 中的单个队列拥有多个消费者,同时确保消息也能够可靠地传递和删除。谢谢您的帮助。
c# - 从代码调用 EAP Web 服务方法需要 IAsyncResult
我们有 Web 服务代理,它具有基于基于事件的异步模式的异步方法。但是我们调用 Web 服务的客户端代码是异步的,但使用异步编程模型 (APM) 实现,它期望 Web 方法返回 IAsyncResult。
我们怎么能做到这一点?
linux - 非 epoll_waiting 时是否正在监视 epoll 事件
我对基于事件的编程相当陌生。我正在尝试使用epoll
's edge-mode,它显然只表示已经准备好读/写的文件(而不是表示所有准备好的文件的 level-mode ,无论是否已经准备好或刚刚准备好)。
我不清楚的是:在边缘模式下,我是否知道在我不在时发生的准备事件epoll_wait
?尚未重新武装的一次性文件上的事件呢?
为了说明我问这个问题的原因,请考虑以下场景:
- 连接了 10 个非阻塞套接字
- 配置
epoll_ctl
为在套接字准备好读取时做出反应,在edge-mode + oneshot中:EPOLLET | EPOLLONESHOT | EPOLLIN
epoll_wait
发生某事(最多报告 10 个事件)- linux 唤醒我的进程并报告套接字 #1 和 #2 已准备好
- 我
read
和处理数据套接字#1(直到E_AGAIN
) - 我
read
和处理数据套接字#2(直到E_AGAIN
) - 当我这样做时,套接字S接收数据
epoll_ctl
我处理了所有事件,所以我用in模式重新武装触发的文件EPOLL_CTL_MOD
,因为 oneshot- 我的循环回到
epoll_wait
ing 下一批事件
好的,那么最后一个epoll_wait
总是会被通知套接字S的准备情况吗?如果S是 #1 的事件(即它没有重新武装)?
reactive-programming - 反应式系统 - 对时间流逝作出反应
假设我们有一个反应式销售预测系统。
每次我们进行销售时,我们都会重新计算我们对未来销售的预测。如果有很多销售触发了我们的重新预测,这将非常有效。但是,如果销售额从每秒 100 个事件变为 0。并且长时间保持为 0,会发生什么情况?我们在销售良好时发布的预测仍然是最新的预测。
在这种情况下,您将如何模拟一个表示“没有销售发生”的事件,而不会退回到一些批量的每小时/每分钟/任意时间段事件,即“X 时间已经过去”。
这是一个通用问题的具体案例——在基于事件的系统中,你如何在没有发生任何事情的情况下模拟时间流逝——不使用会唤醒每个人重新考虑他们当前值的滴答时钟式事件[一个无法扩展的实现] .
我认为唯一有意义的选择是:每次我们进行销售时,我们还会在未来 2 小时内安排一个延期活动,要求我们重新考虑对该销售的评估。在处理该延迟事件时,我们可以选择安排进一步的延迟事件以供重新考虑。
android - Android Studio - 访问主循环
主要只是寻找我可以在每个循环中调用一个方法的地方。我想在一段时间内增加/减少按钮的 Y。这可以在没有事件系统的情况下完成吗?
messaging - 如何在基于事件、消息驱动的微服务架构中在故障场景中恢复状态
考虑到这种情况并想象一个过于简化的订购系统,如下图所示:
以及以下消息流:
- 订单来自某个来源(网络/移动设备等)
- 订单服务接受订单并发布
CreateOrderEvent
- InventoryService 对 做出反应
CreateOrderEvent
,做一些库存工作并InventoryUpdatedEvent
在完成后发布 - Invoice 服务然后对 做出反应
InventoryUpdatedEvent
,发送发票并发布EmailInvoiceEvent
所有服务都已启动,我们愉快地处理订单……每个人都很高兴。然后,库存服务因某种原因而关闭
假设事件总线上的事件在“非阻塞”庄园中流动。即消息被发布到一个中心主题,如果没有服务正在读取它,则不要堆积在队列中(我试图传达的是一个事件总线,如果事件在总线上发布,它会流“直接通过”而不是排队 - 忽略此时使用的消息传递平台/技术)。这意味着,如果 Inventory 服务关闭了 5 分钟,那么CreateOrderEvent
在此期间通过事件总线的 ' 现在“消失”或不被 Inventory 服务看到,因为在我们过于简化的系统中,没有其他系统对那些事件。
那么我的问题是:库存服务(以及整个系统)如何以不丢失/未处理订单的方式恢复状态?