问题标签 [eventmachine]

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 回答
485 浏览

ruby - 使用 eventmachine 发送哈希

我想将填充有数据的哈希从 EventMachine 客户端发送到服务器。问题是服务器 receive_date 方法只打印一个字符串。

服务器:

客户端:

这一行: puts data[:total]

只打印零

0 投票
1 回答
1096 浏览

ruby - 使用 Ruby 实现非阻塞 IO?

我对非阻塞 IO 有一些疑问:

  1. 如果我在 Nginx 上使用没有 EventMachine 的 Ruby,我可以利用非阻塞 IO 吗?

  2. 如果我在 Apache 上使用 Ruby 和 EventMachine,我可以利用非阻塞 IO 吗?

  3. 如果上述答案是否定的,那么这意味着我必须在 Nginx 上使用 Ruby 和 EventMachine 来利用非阻塞 IO?

0 投票
3 回答
2909 浏览

ruby-on-rails - Ruby on Rails + EventMachine?

我听说您必须在整个应用程序中使用非阻塞代码才能利用 EventMachine 的真正力量。

这是否意味着我无法使用 EventMachine 运行 Ruby on Rails?

0 投票
1 回答
237 浏览

ruby - Ruby eventmachine 错误:'没有循环断路器'

我从 eventmachine(0.12.10,在 OSX 10.6.4 上)得到一个轻微的 heisen 错误:

它仅发生在测试中,并且仅在所有测试一起运行时发生。他们通过单独运行。

我发现 eventmachine 代码中唯一提到错误消息的地方:

http://github.com/eventmachine/eventmachine/blob/master/ext/em.cpp#L333

(让我感到困惑的是,它看起来像一个 win32 代码路径,还是我错了?)

对我来说,看起来像套接字这样的资源已经用完了。这将解释发生模式。

0 投票
2 回答
1386 浏览

ruby - 使用 Thin 和 Sinatra 异步迭代请求的响应

如果您在 Sinatra 中的响应返回一个“eachable”对象,则 Sinatra 的事件循环将“每个”您的结果并以流方式将结果作为 HTTP 响应产生。但是,如果对 Sinatra 有并发请求,它将在处理另一个请求之前遍历一个响应的所有元素。如果我们有一个指向某个数据库查询结果的游标,这意味着我们必须等待所有数据都可用,然后才能处理并发查询。

我看过 async-sinatra gem 和http://macournoyer.com/blog/2009/06/04/pusher-and-async-with-thin/,认为这些可以解决我的问题,但我试过了出这个例子:

并且/delay/5请求不会像我预期的那样同时工作,即我同时发出 3 个请求,Chrome 的调试器将响应时间记录为大约 5、10 和 15 秒。

我错过了一些设置还是有另一种方法告诉 Sinatra/Thin 以并发方式处理请求?

更新:这是另一个问题(或可能解决问题):并发运行具有正确的行为(每个请求在约 5 秒内返回 2 个)。运行(Apache 基准实用程序)也会在总时间(约 25 秒)内返回一些合理的值。Firefox 表现出与 Chrome 相同的行为。浏览器与命令行实用程序有何不同?curl -i http://localhost:3000/delay/5ab -c 10 -n 50 http://locahost:3000/delay/5

0 投票
1 回答
334 浏览

ruby - EventMachine 的一个问题

我的问题是如何在 EchoServer 模块中获取 some_value ?类 Test 和模块 EchoServer 之间的关系是什么?

0 投票
1 回答
1537 浏览

ruby - Eventmachine::defer + ruby

我使用 EventMachine 已经有一段时间了,我真的觉得它很棒,因为它管理向我展示了我不必担心任何事情。但最近我发现了一个我无法理解的奇怪问题

这里只是告诉

我有 Eventmachine 循环,看起来像这样

这里我的操作块看起来像(下面使用 amqp 使用胡萝卜宝石的代码)

这里我的回调块看起来像

现在问题来了,代码虽然按照它应该的方式工作,直到发生不好的事情我的意思是

现在假设我运行上面的代码

我有一个队列集名称“my_queue”,或者如果它不存在,它将创建一个队列最初是空的

这是我在控制台上得到的输出

启动队列

队列正在弹出消息

BOO 对进程没有任何影响

当我根据消息在控制台中构建输出更改时

现在的麻烦

如果我暂时关闭我的 AMQP 服务器这里的输出(显示我的意思)

启动队列

Broken Pipe => Error That Caught in begin rescue block in operation block

现在启动 AMQP 服务器

代码似乎永远不会从当前出现错误的行向前移动,这意味着我似乎从未打印过该行

队列正在弹出消息

不仅发生了重试的当前延迟,而且在 Timer 时间刚刚过去之后启动的新延迟操作块,即后续调用操作块的方法似乎永远不会向前移动并进行处理,并且总是只打印以下输出

只是似乎永远不会前进(卡住)并进行处理,即从队列中获取消息并相应地进行处理,并且所有其他内容(因为 AMQP 服务器现在正在运行)

谢谢

0 投票
2 回答
1765 浏览

ruby - Ruby concurrency/asynchronous processing (with simple use case)

I was looking into ruby's parallel/asynchronous processing capabilities and read many articles and blog posts. I looked through EventMachine, Fibers, Revactor, Reia, etc, etc. Unfortunately, I wasn't able to find a simple, effective (and non-IO-blocking) solution for this very simple use case:

Is you can see, my little script is performing three operations read (R), process (P) & write (W). Let's assume - for simplicity - that each operation takes exactly 1 unit of time (e.g. 10ms), the current code would therefore do something like this (5 lines):

But, I would like it to do something like this:

Obviously, I could run three processes (reader, processor & writer) and pass read lines from reader into the processor queue and then pass processed lines into the writer queue (all coordinated via e.g. RabbitMQ). But, the use-case is so simple, it just doesn't feel right.

Any clues on how this could be done (without switching from Ruby to Erlang, Closure or Scala)?

0 投票
1 回答
4629 浏览

ruby - 如何使用 SSL 客户端证书获取 HTTPS 请求以使用 Ruby EventMachine?

我正在尝试使用 Ruby EventMachine 访问使用 SSL 证书身份验证的 HTTPS Web 服务,但我没有让它工作。

我编写了以下简单的代码块来对其进行端到端测试:

运行上述输出,<SSL_incomp>然后运行引发的 RuntimeError 消息。我尝试将:verify_peerset 设置为 true 和 false 运行,它给了我同样的错误。EventMachine::HttpRequest#get不带:ssl选项运行也是如此。

我还尝试在没有选项的情况下将请求发送到 GMail ( https://mail.google.com ) :ssl(即没有证书的普通 HTTPS),并且可以输出状态代码 200、标题和正文。

我尝试使用 curl 对 Web 服务执行相同的请求,并且有效:

我在想我要么错误地使用了 em-http-request gem 或 EventMachine,要么 SSL 文件的格式适用于 curl 但不适用于 EventMachine。

我有人知道如何解决上面的示例或直接使用 EventMachine 提供类似的示例将不胜感激!

0 投票
1 回答
129 浏览

ruby-on-rails - AJAX 和 Rails:两个堆栈还是一个?

大多数 Web 应用程序都是非常标准的 CRUD。我需要一些数据在创建时实时推送给客户端。是否值得为 AJAX 运行一个单独的、更轻量级的堆栈(例如 Sinatra 或 EventMachine)?

如果我运行一个堆栈,我将有 Rails 的开销。这可能需要更多 Rails 进程/服务器,那么如何在没有数据库查询的情况下在这些进程/服务器之间进行通信?零MQ?最后,Rails 是否适合处理数百个并发连接?

如果我运行两个堆栈,我将需要复制授权逻辑。

哪些方法对您来说是成功的?