问题标签 [evented-io]

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 投票
1 回答
862 浏览

asp.net - 带有 HttpResponse Asp.Net pre-4.5 的异步 IO

特别是,我在使用 I/O 完成端口的 Asp.NET 4.5 中引入与Response.BeginFlush类似的功能。

我担心这可能是不可能的,因为 .NET 4 之前的版本似乎并没有暴露足够的内容来使用 HttpResponse 实现异步 IO。IHttpAsyncHander就目前公开的情况而言。集成 HttpListener 似乎没有太大希望。

我还研究了带有 Asp.NET 的SignalR,它似乎依赖于 .NET 4.5。

我到底有多烂?

0 投票
1 回答
165 浏览

python - 如何测试 gevent 的套接字导致超时的假设?

我有使用 gevent 的复杂 python 程序。

我一直遇到这个可怕的问题,它在读取套接字时超时了几分钟。在这些情节中,我重试了多次,但仅在几分钟后才成功。

我非常确定在套接字上监听的那个人仍在正常工作,因为在其中一个情节中,因为我可以从另一个未发生事件的进程中读取该套接字。

这可能是一个已在 gevent 1.0 中修复的错误,但升级并非易事,在花费一两个星期升级之前,我想更加确信 gevent 的套接字确实是我的问题。

将我的程序更改为非事件也并非易事。

如何检验我的假设,即 gevent 的套接字有问题?

0 投票
2 回答
2758 浏览

scala - Play framework 2.0 控制器/Async 究竟是如何工作的?

我最近迁移到 Play framework 2.0,关于控制器在游戏中的实际工作方式,我有一些疑问。

播放文档中提到:

由于 Play 2.0 的工作方式,动作代码必须尽可能快(即非阻塞)。

但是在文档的另一部分

似乎有 24 个参与者分配给控制器处理。我猜每个请求都会在请求的生命周期内分配其中一个参与者。那正确吗?

另外,是什么parallelism-factor意思,又有何fork-join-executor不同thread-pool

另外 - 文档应该说 Async 应该用于长时间计算。什么是长计算?100 毫秒?300毫秒?5秒?10秒?我的猜测会超过一秒钟,但如何确定呢?

这个问题的原因是测试异步控制器调用比常规调用更难。您必须启动一个假应用程序并执行一个完整的请求,而不是仅仅调用一个方法并检查它的返回值。

即使情况并非如此,我也怀疑将所有内容都包含在内Async 并且Akka.future是一种方式。

我已经在#playframework IRC 频道中提出了这个问题,但没有得到答复,而且似乎我不是唯一一个不确定应该如何做的人。

只是重申:

  1. 每个请求都从 /actions 池中分配一个演员是否正确?
  2. 是什么parallelism-factor意思,为什么是1?
  3. 与有何fork-join-executor不同?thread-pool-executor
  4. 计算应该包含多长时间Async
  5. 如果不启动假应用程序就不可能测试异步控制器方法吗?

提前致谢。

编辑:来自 IRC 的一些东西

来自 IRC 的一些东西。

0 投票
1 回答
5778 浏览

c - UV_RUN_NOWAIT 模式在 libuv 中是如何工作的?

当使用该函数在 libuv 中运行事件循环时uv_run,有一个“mode”参数与以下值一起使用:

前两个很明显。UV_RUN_DEFAULT运行事件循环,直到没有更多事件,并UV_RUN_ONCE处理循环中的单个事件。但是,UV_RUN_NOWAIT它似乎不是一个单独的模式,而是一个可以与其他两个值之一进行或运算的标志。

默认情况下,此函数会阻塞,直到事件处理完毕,并UV_RUN_NOWAIT使其成为非阻塞,但我能找到的任何文档都到此为止。我的问题是,如果你非阻塞地运行事件循环,回调是如何处理的?

libuv 事件模型是单线程的(反应器模式),所以我假设它需要阻塞才能调用回调,但是如果主线程被占用,事件处理后会发生什么?回调是否会被“排队”直到 libuv 再次控制主线程?还是会在另一个线程上分派回调?

0 投票
1 回答
357 浏览

javascript - Ember.js 事件控制器触发事件

我正在尝试从 Ember.js 控制器触发一个事件,以便监听视图可以自行更新。这是咖啡脚本。

它失败并出现错误 Object #Object has no method trigger。.done 函数中的 @ 指的是 jQuery post 对象而不是控制器。

如何从 jQuery 回调中获取对父控制器对象的引用?

任何指导将不胜感激。

0 投票
1 回答
274 浏览

php - 用于 Rack 的轻量级流式 HTTP 代理(Ruby CPU-light HTTP 客户端库)

因此,我正在尝试一种情况,即我想通过我的服务器将大型文件从第三方 URL 流式传输到请求客户端。

到目前为止,我已经尝试使用 Curb 或 Net::HTTP 来实现这一点,方法是遵循“eachable”响应体的标准 Rack 实践,如下所示:

但是我不能让这个系统使用少于 40% 的 CPU(在我的 MacBook Air 上)。如果我尝试对 Goliath 做同样的事情,使用 em-synchrony(如 Goliath 页面上的建议)我可以将 CPU 使用率降低到大约 25% CPU,但是我无法刷新标题。我的流式下载“挂起”在请求客户端中,并且在将整个响应发送到客户端后,无论我提供什么标头,标头都会显示。

我是否正确地认为这是 Ruby 非常糟糕的情况之一,而我不得不转向世界上的 go 和 nodejs ?

相比之下,我们目前使用 PHP 从 CURL 流式传输到 PHP 输出流,并且 CPU 开销很小。

还是有我可以要求处理我的东西的上游代理解决方案?问题是 - 一旦整个主体被发送到套接字,我想可靠地调用一个 Ruby 函数,而像 nginx 代理这样的东西不会为我做这件事。

更新:我尝试为 HTTP 客户端做一个简单的基准测试,看起来大部分 CPU 使用都是 HTTP 客户端库。Ruby HTTP 客户端有一些基准测试,但它们基于响应接收时间——而从未提及 CPU 使用率。在我的测试中,我执行了一个 HTTP 流式下载,将结果写入/dev/null,并获得了一致的 30-40% 的 CPU 使用率,这与我通过任何 Rack 处理程序进行流式传输时的 CPU 使用率相匹配。

更新:事实证明,大多数 Rack 处理程序(Unicorn 等)在响应主体上使用 write() 循环,当无法足够快地写入响应时,它可能会进入繁忙等待(CPU 负载高)。这可以通过使用rack.hijack和写入输出套接字来在write_nonblock一定程度上缓解IO.select(惊讶于服务器自己不这样做)。

0 投票
1 回答
200 浏览

ruby - 使用 IO.select 时的 Thread.pass

我正在写入线程服务器中的套接字(目前在 MRI 上运行)。使用以下代码执行此操作:

它的要点是,如果我有一个 WaitWritable (套接字已饱和),我希望运行它的服务器抢占另一个线程。这是Thread.pass一个好主意,或者如果我的线程正在执行 MRI 会自动抢占其他东西select()吗?