问题标签 [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 投票
2 回答
427 浏览

ruby - Ruby 数据包缓冲和拆分

所以,我想这有点宽泛,但我会尽量缩小范围。我有一台服务器(带有 EventMachine),有时数据包会被拆分,但有时它们会被缓冲。所以,我尝试创建一个可以缓冲/取消缓冲它们的函数。我确实设法制作了一些东西,但是它没有“按预期”工作。老实说,我什至怀疑我什至可以称之为“几乎没有功能”。

首先,我想指出数据包结构:

  • 数据包的前四个字节是它的 ID,或数据包的名称 ( name)。
  • 接下来的四个字节是数据包的“msg”部分的长度(len)。
  • msg 部分之前的最后四个字节是一个引用字段,它有多种用途(ref)。

注意:lenf是 len 的原始格式,所以是一个字符串,我认为这并不重要。


缓冲代码


TLDR

如何在 Ruby 中拆分缓冲缓冲拆分数据包/数据(由 EventMachine 传递)?

更新:数据包通过 TCP 发送。数据来自用 C 语言制作的客户端,所以是的,它是一个字节流。

我不确定到底出了什么问题,但该方法似乎没有正确拆分或缓冲数据包。它在接收少量数据时工作正常(我假设这些数据既不是缓冲的也不是拆分的)。

有时它甚至可以成功拆分数据包,如果它们被缓冲,但缓冲似乎根本不起作用


我很确定我在这里搞砸了一些“逻辑”部分,但我就是不知道它是什么。任何帮助将不胜感激。

谢谢

0 投票
1 回答
1806 浏览

ruby - 无法使用 OpenSSL 在 Synology DiskStation 上安装 Eventmachine

我正在尝试在我的 Synology DiskStation DS211 基于 Linux 的 NAS 上安装 EventMachine ruby​​ gem,但在尝试为本机扩展创建 Makefile 时安装失败,说:

mkmf.log 的内容:


Ruby 和 OpenSSL 均已成功安装在使用 Optwareipkg到默认/opt目录的机器上。

我怀疑由于 OpenSSL 安装在意外目录中而导致 EventMachine 失败,但尚不清楚指定正确位置所需的配置选项和值的组合。

一些环境细节:

有没有其他人在这种环境中安装 EventMachine 有运气?

0 投票
1 回答
510 浏览

ruby - 用上帝终止非守护进程的正确方法是什么?

我有一门课,我正在使用上帝进行监控。这是它的结构:

lib/my_class.rb

这就是我与上帝一起运行它的方式:

配置/my_config.god

结尾

由于我没有指定停止(我不知道如何),如果失败,上帝会发送 aSIGTERM然后 a来停止该过程。SIGKILL这是我应该如何处理非守护进程吗?

0 投票
1 回答
337 浏览

sinatra - 可以在瘦 webapp 中使用 EM 调用吗?

是否可以在 Thin 内部使用 EventMachine 调用而无需额外初始化?

目前,我有一个 Thin 运行的 Sinatra 应用程序(作为服务运行)。当我尝试使用EventMachine.connect_unix_domain时,我得到eventmachine not initialized......即使 Thin(可能是 EventMachine)正在运行。

0 投票
1 回答
227 浏览

ruby - 带有 DRb 或 EventMachine 的 QtRuby

我想使用 Qt 在 Ruby 中编写一个应用程序,它将通过网络与其他实例进行通信。

如何将 Qt 的事件循环与 DRb 或 EventMachine 集成?

编辑:

我找到了答案,当我有更多时间时,我会发布它

0 投票
2 回答
1629 浏览

ruby - EventMachine UNIX 套接字连接:如何在 Thin 作为服务运行时使用它们?

EventMachine.connect_unix_domain在将 Thin 作为服务运行时如何使用(使用下面的初始化脚本(摘录)和配置)。下面的代码就是问题所在(我得到一个eventmachine not initialized: evma_connect_to_unix_server错误)。第二个代码示例有效,但不允许我守护瘦(我不认为)。Thin 是否还没有正在运行的 EventMachine 实例?

更新:奇怪的是:停止服务器(使用service thin stop),似乎进入 config.ru 文件并运行应用程序(所以它可以工作,直到stop命令超时并终止进程)。当薄停止可能导致这种行为时会发生什么?

有问题的代码

工作代码

初始化脚本摘录

精简配置

0 投票
1 回答
898 浏览

ruby-on-rails - Rails 中的 Async_Sinatra:异步操作无法写入共享会话

我在 Rails 项目中有一个 Sinatra 类。它使用 eventmachine 和 async_sinatra 对外部站点进行异步调用。我想写入一个会话对象(理想情况下,与 Rails 使用的对象相同),但到目前为止我只能:

  • 从 Rails 写入单独的会话对象(默认情况下,Sinatra 将其会话命名为与 Rails 不同的名称)
  • 仅针对同步调用写入同一会话

当我进行异步调用时,用 async_sinatra 代码编写的会话不会被推送到客户端机器。我怀疑正在发生两件事之一:

  • 标头已经发送到客户端,存储会话的局部变量(在 Sinatra 中)将在操作结束时刷新。客户端永远不会看到来自服务器的将这些数据保存到 cookie 的请求。

  • 标头发送到客户端,但 Rails 立即发送另一个,指示客户端将 Rails 存储在其变量中的内容写入 cookie session,覆盖 Sinatra 写入的内容。

无论哪种方式,我都想在 Sinatra 和 Rails 中获得简单的会话功能。解释我做错了什么也很好:)

代码的完整工作副本在 github 上,但我相信问题出在这段代码中:

编辑 7/15

更改了 Github 上的代码以包含 Async-Rack。当会话不与 Rails 共享时,Async-sinatra 可以写入会话。比较mastersegmented_sessions分支的行为差异。(或在master分支上,更改use ActionDispatch::Session::CookieStoreenable :sessions

0 投票
3 回答
1894 浏览

ruby - Ruby:EventMachine未加载

更新:

我找到了简单的答案,这完全是我自己的错:我将上面的代码存储在一个名为“eventmachine.rb”的文件中。因此,当我需要“eventmachine”时,它只是导入了相同的文件,该文件不包含 EventMachine 的定义。

所以这并不是一篇关于 EventMachine 的文章。

原帖:

对不起,但发生了什么事?

当我运行“ruby myfile.rb”时,在 TextMate 和控制台上。

但是如果我在 IRB 中输入相同的内容,我会得到

.

...

我非常沮丧,以至于我按照http://blog.carlmercier.com/2007/12/14/how-to-fix-that-rubygems-mess-on-leopard/上的轻率说明进行操作——清除我的 Ruby 和Rubygems 环境并从 MacPorts 重新安装它们。IRB 仍然有效,TextMate/commandline 仍然以同样的方式失败。我什至将我的 TextMate PATH 减少到现在安装了 Ruby、Gem 和 IRB 的一个位置:/opt/local/bin——这就是 which 报告的内容。

最后,当我

在 IRB、TextMate 或控制台上,我得到相同的路径。

0 投票
2 回答
532 浏览

ruby - 事件机器:并发

我有一个简单的程序,它接收连接,进行一些处理并在标准端口上发送回响应。由于这是同步完成的,如果一个请求花费的时间太长,则不会处理并发请求。

无论是否发生任何阻塞请求,都可以推迟允许同时处理多个请求的方式吗?

谢谢,

0 投票
1 回答
910 浏览

ruby - 将大量消息发布到 AMQP 队列

使用 Ruby amqp 库的 v0.7.1 和 Ruby 1.8.7,我试图将大量(数百万)短(约 40 字节)消息发布到 RabbitMQ 服务器。我的程序的主循环(嗯,不是真正的循环,但仍然)看起来像这样:

代码开始处理结果数组就好了,但过了一段时间(通常,在 12k 条消息之后)它会因以下错误而死

队列中不存储任何消息。该错误似乎只是在从程序到队列服务器的网络活动开始时发生。

我究竟做错了什么?