问题标签 [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.

0 投票
3 回答
156 浏览

functional-programming - 是否存在基于异步事件的编程语言?

我有一些时间考虑了一种基于事件的编程语言。我的意思是一种语言,当您更改因变量时,每个变量都会更新。例如,考虑以下终端应用程序的伪代码:

按 enter 将打印b的值。但结果将仅在前五秒内为10 ,因为之后a将更新为10并且在接下来的五秒内b将等于15,因为b取决于a

这个概念当然会带来一些问题,但它也提供了一些好处。例如,想象一个 GUI 应用程序(通常用事件编程),它显示两个输入框和两个数字相加的结果:

它可以通过以下方式编程:

而已。它有点像 excel,但有真正的编程。有这样的编程语言吗?或者类似的东西?

0 投票
0 回答
298 浏览

servlets - servlet 容器中的网关/反向代理实现

我正在尝试使以下模型成为“非阻塞 IO”模型。流动:

  1. servlet过滤器拦截并做一些业务(认证、授权、包装请求)
  2. 根据请求方法,使用 apache http 客户端(库)进行进一步的服务请求
  3. http客户端给出响应并将其发送给调用者

servlet 3 规范中的 AsyncContext 虽然解决了需求,但仍然需要创建工作线程。

从第二步到第三步有没有办法使用netty(作为servlet容器内的可插入组件)?因此,一旦服务响应进入第三步,netty 组件是否会在没有 servlet 容器的情况下写入客户端?

或者有没有办法在netty中编写servlet过滤器?apache HttpAsyncClient 在这里是一个不错的选择吗?

或者对当前方法有什么设计建议?

0 投票
0 回答
419 浏览

asynchronous - 什么是 Thrift 事件库以及它是如何实现的?

我开始使用 thrift,但我找不到关于 thrift 基本架构的好文档。我唯一知道的是我们必须将事件排队到 eventBase 中。谁能解释更多关于 Thrift EventBase 的信息?

0 投票
2 回答
10717 浏览

apache - 为什么 Apache Event MPM 表现不佳?

Event MPM 与 Nginx 的设计并不完全相同,但显然是为了让 keepalives 更稳定并更快地发送静态文件而设计的。我的理解是 Event MPM 有点用词不当,因为:

  1. 虽然连接是传给kqueue/epoll,
  2. 某些非常重要的模块,例如 mod_gzip 和 mod_ssl 将阻塞/消耗一个线程,直到响应完成,
  3. 这是大文件的问题,但可能不是 PHP 生成的 HTML 文档等。

不幸的是,Apache 不断失去市场份额,大多数基准测试都对 MPM 事件不利。基准测试是否存在缺陷,或者事件 MPM 对 Nginx 的表现真的很差?即使有这些限制,在正常流量(非恶意)和较小文件下,它应该与 Nginx 有一定的竞争力。例如,通过 php-fpm 在慢速连接上提供 PHP 生成的文档应该是有竞争力的,因为文档将被缓冲(即使是 ssl'd 和 gzip'd)并异步发送。使用压缩或不使用压缩的 SSL 和非 SSL 连接的工作方式与 Nginx 在此类工作负载上的工作方式没有明显不同。

那么为什么它没有在各种基准测试中大放异彩呢?它出什么问题了?或者基准有什么问题?一个主要网站是否使用它来呼吁它可以执行的权威?

0 投票
3 回答
46527 浏览

amazon-web-services - 将 Amazon SQS 与多个使用者一起使用

我有一个基于服务的应用程序,它使用带有多个队列和多个使用者的 Amazon SQS。我这样做是为了实现基于事件的架构并解耦所有服务,其中不同的服务对其他系统的状态变化做出反应。例如:

  • 注册服务
    • 新用户注册时发出事件“registration-new”。
  • 用户服务
    • 更新用户时发出事件“用户更新”。
  • 搜索服务
    • 从队列“registration-new”中读取并在搜索中索引用户。
    • 从队列“用户更新”中读取并更新搜索中的用户。
  • 指标服务
    • 从“registration-new”队列中读取并发送到 Mixpanel。
    • 从队列“用户更新”中读取并发送到 Mixpanel。

我有很多问题:

  • 轮询时可以多次收到一条消息。我可以将很多系统设计为幂等的,但对于某些服务(例如指标服务)而言,这将更加困难。
  • 需要从 SQS 的队列中手动删除一条消息。我曾想过实现一个“消息处理服务”,它在所有服务都收到消息时处理消息的删除(每个服务在处理消息后都会发出一个“消息确认”事件)。

我想我的问题是:我应该使用什么模式来确保我可以为 SQS 中的单个队列拥有多个消费者,同时确保消息也能够可靠地传递和删除。谢谢您的帮助。

0 投票
1 回答
85 浏览

c# - 从代码调用 EAP Web 服务方法需要 IAsyncResult

我们有 Web 服务代理,它具有基于基于事件的异步模式的异步方法。但是我们调用 Web 服务的客户端代码是异步的,但使用异步编程模型 (APM) 实现,它期望 Web 方法返回 IAsyncResult。

我们怎么能做到这一点?

0 投票
1 回答
1828 浏览

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_waiting 下一批事件

好的,那么最后一个epoll_wait 总是会被通知套接字S的准备情况吗?如果S是 #1 的事件(即它没有重新武装)?

0 投票
1 回答
61 浏览

reactive-programming - 反应式系统 - 对时间流逝作出反应

假设我们有一个反应式销售预测系统。

每次我们进行销售时,我们都会重新计算我们对未来销售的预测。如果有很多销售触发了我们的重新预测,这将非常有效。但是,如果销售额从每秒 100 个事件变为 0。并且长时间保持为 0,会发生什么情况?我们在销售良好时发布的预测仍然是最新的预测。

在这种情况下,您将如何模拟一个表示“没有销售发生”的事件,而不会退回到一些批量的每小时/每分钟/任意时间段事件,即“X 时间已经过去”。

这是一个通用问题的具体案例——在基于事件的系统中,你如何在没有发生任何事情的情况下模拟时间流逝——不使用会唤醒每个人重新考虑他们当前值的滴答时钟式事件[一个无法扩展的实现] .

我认为唯一有意义的选择是:每次我们进行销售时,我们还会在未来 2 小时内安排一个延期活动,要求我们重新考虑对该销售的评估。在处理该延迟事件时,我们可以选择安排进一步的延迟事件以供重新考虑。

0 投票
1 回答
236 浏览

android - Android Studio - 访问主循环

主要只是寻找我可以在每个循环中调用一个方法的地方。我想在一段时间内增加/减少按钮的 Y。这可以在没有事件系统的情况下完成吗?

0 投票
3 回答
3702 浏览

messaging - 如何在基于事件、消息驱动的微服务架构中在故障场景中恢复状态

在微服务架构的上下文中,同步(可能是REST基于)机制。

考虑到这种情况并想象一个过于简化的订购系统,如下图所示:

订购系统

以及以下消息流:

  • 订单来自某个来源(网络/移动设备等)
  • 订单服务接受订单并发布CreateOrderEvent
  • InventoryService 对 做出反应CreateOrderEvent,做一些库存工作并InventoryUpdatedEvent在完成后发布
  • Invoice 服务然后对 做出反应InventoryUpdatedEvent,发送发票并发布EmailInvoiceEvent

所有服务都已启动,我们愉快地处理订单……每个人都很高兴。然后,库存服务因某种原因而关闭

假设事件总线上的事件在“非阻塞”庄园中流动。即消息被发布到一个中心主题,如果没有服务正在读取它,则不要堆积在队列中(我试图传达的是一个事件总线,如果事件在总线上发布,它会流“直接通过”而不是排队 - 忽略此时使用的消息传递平台/技术)。这意味着,如果 Inventory 服务关闭了 5 分钟,那么CreateOrderEvent在此期间通过事件总线的 ' 现在“消失”或不被 Inventory 服务看到,因为在我们过于简化的系统中,没有其他系统对那些事件。

那么我的问题是:库存服务(以及整个系统)如何以不丢失/未处理订单的方式恢复状态?