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

ruby - 是什么导致 EventMachine::ConnectionNotBound?

我是 EventMachine 的新手,所以我不确定这意味着什么。我得到了这个例外:

该程序相当复杂,因此我无法真正解释可能导致它的所有内容。我所需要的只是一个指向要寻找什么的指针。该错误似乎没有记录(查看http://eventmachine.rubyforge.org/)。

0 投票
1 回答
455 浏览

ruby - 使用ruby中的类方法跨对象共享数据库连接?

我正在编写一个 ruby​​ 脚本,用作 Postfix SMTP 访问策略委托。该脚本需要访问 Tokyo Tyrant 数据库。我正在使用 EventMachine 来处理网络连接。EventMachine 需要一个 EventMachine::Connection 类,该类在创建新连接时由 EventMachine 的处理循环实例化。因此,对于每个连接,都会实例化和销毁一个类。

我正在从 EventMachine::Connection 的 post_init 创建到 Tokyo Tyrant 的连接(即在连接建立后立即)并在连接终止后将其拆除。

我的问题是这是否是连接到数据库的正确方法?即每次我需要它时都建立连接并在我完成后将其拆除?在程序关闭期间连接到数据库一次(程序启动时)会不会更好?如果是这样,我应该如何编码?

我的代码是:

带着敬意,

拉吉

0 投票
2 回答
2553 浏览

jruby - JRuby EventMachine 没有要加载的文件

我在 JRuby 中安装了 EventMachine(我使用的是 Win32)。当我尝试服务器示例时,出现错误

错误是:

server.rb:1:in `require': no such file to load -- eventmachine (LoadError) from server.rb:1

但是gem已安装!

0 投票
2 回答
951 浏览

ruby - 使用 EventMachine 的 SOAP 调用

有没有办法在 EventMachine 中发出非阻塞 SOAP 请求?

我正在使用 adwords4r gem 创建一个与 google adwords api(基于 SOAP)交互的 ruby​​ 应用程序。该应用程序使用 EM 通过 stomp 连接接收消息,然后通过对 adwords api 进行 SOAP 调用来处理这些消息。显然我需要这些调用是非阻塞的,因为处理将在反应器线程内。一种选择是使用 EM.defer,但我宁愿没有线程池中一堆线程的开销。

0 投票
3 回答
3825 浏览

ruby - EventMachine : 如何使用 Rails 应用程序构建聊天系统

我正在使用 EventMachine 和 ruby​​ on rails 构建一个聊天系统。是为了学习的目的。

这就是客户端连接到服务器的方式。

有用。但是问题是我无法获得当前在房间里聊天的人的列表,因为如上所示,客户端不断打开和关闭连接。

另一种计划是为每个连接的用户运行一个 EventMachine 客户端。我计划将客户端连接存储在每个用户的会话中。这样,我将为每个用户使用相同的问题。当用户注销时,我将关闭连接。

但是,如果用户退出,那么我如何自行关闭客户端连接。

有什么想法吗。

0 投票
4 回答
1757 浏览

ruby-on-rails - 在 Rails 中执行大量异步 IO 绑定操作

我正在开发一个定期需要执行大量 IO 绑定操作的 Rails 应用程序。这些操作可以异步执行。例如,对于每个用户,系统每天需要查询 Salesforce.com 以获取用户当前正在跟踪的帐户(公司)列表。这会导致大量(可能 > 100k)的小查询。

我们当前的方法是将 ActiveMQ 与 ActiveMessaging 结合使用。我们的每个用户都作为不同的消息被推送到队列中。然后,消费者将用户从队列中拉出,查询 Salesforce.com 并处理结果。但是这种方法给了我们可怕的性能。在单个轮询进程中,我们一次只能处理一个用户。因此,Salesforce.com 查询变为序列化。除非我们实际上运行数百个轮询器进程,否则我们无法接近饱和运行轮询器的服务器。

我们正在寻找 EventMachine 作为替代方案。它的优势是允许我们在单个 EventMachine 进程中同时启动大量 Salesforce.com 查询。因此,我们的服务器得到了很好的并行性和利用率。

但是 EventMachine 有两个问题。1) 我们失去了使用 ActiveMQ/ActiveMessaging 提供的可靠消息传递。2) 我们不能轻易地定期重启我们的 EventMachine 来减少内存增长的影响。例如,使用 ActiveMessaging,我们有一个每天重新启动轮询器的 cron 作业,这可以在不担心丢失任何消息的情况下完成。但是使用 EventMachine,如果我们重新启动进程,我们可能会丢失数百条正在处理的消息。我能看到的唯一方法是在 EventMachine 之上构建一个持久性/可靠的交付层。

有没有人有更好的方法?可靠地执行大量异步 IO 绑定操作的最佳方法是什么?

0 投票
2 回答
4462 浏览

sockets - 如何以最少的停机时间移交 TCP 侦听套接字?

虽然这个问题被标记为 EventMachine,但任何语言的通用 BSD-socket 解决方案也非常受欢迎。


一些背景:

我有一个监听 TCP 套接字的应用程序。它使用常规的 System V 风格的初始化脚本启动和关闭。

我的问题是它需要一些时间才能准备好为 TCP 套接字提供服务。这不是太长,也许只有 5 秒,但在工作日需要重新启动时,这 5 秒太长了。现有连接保持打开并正常完成也很重要。

重新启动应用程序的原因是补丁、升级等。不幸的是,我发现自己每隔一段时间就需要在生产中做这种事情。


问题:

我正在寻找一种方法来巧妙地将 TCP 侦听套接字从一个进程切换到另一个进程,因此只能获得一瞬间的停机时间。我希望现有的连接/套接字保持打开并在旧进程中完成处理,而新进程开始为新的连接提供服务。

是否有一些使用 BSD 套接字的行之有效的方法?(EventMachine 解决方案的奖励积分。)

是否有开源库可以实现这一点,我可以按原样使用或用作参考?(同样,非 Ruby 和非 EventMachine 解决方案也很受欢迎!)

0 投票
3 回答
422 浏览

windows - eventmachine 和外部脚本通过反引号

我有一个使用 eventmachine 编写的小型 HTTP 服务器脚本,它需要调用外部脚本/命令,并通过反引号 ( ``) 来实现。当提供不运行反引号代码的请求时,一切都很好,但是,只要我的 EM 代码执行任何反引号的外部脚本,它就会停止提供请求并停止执行。

我注意到 eventmachine 似乎对子进程和/或线程很敏感,并且似乎有用popen于此目的的方法,但 EM 的消息来源警告说此方法在 Windows 下不起作用。很多运行这个脚本的机器都在运行 Windows,所以我不能使用popen.

我在这里运气不好?是否有一种安全的方法可以从 Windows 下的 eventmachine 脚本运行外部命令?有什么办法可以在不阻止 EM 执行的情况下触发一些在外部运行的命令?

编辑:似乎把 EM 搞砸的罪魁祸首是我对 Windowsstart命令的使用,如:start java myclass. 我使用 start 的原因是因为我希望这些外部脚本开始运行并在提供 EM 请求后继续运行

0 投票
2 回答
322 浏览

ruby - 2 人游戏的 Flash 通信选项

我目前正在开发一个嵌入 Flash 游戏的项目,该项目使用 Smartfoxserver 进行 Flash 通信。这种通信主要只是同步两个玩家之间的光标和对象移动。

由于我不是 flash 人,而是 ruby​​ 程序员,我很好奇:flash 为这种时间敏感的数据交换提供了什么样的通信选项?我正在考虑编写一个基于 ruby​​-eventmachine 的通信服务器,以尽量减少对外部程序的依赖。这甚至可行吗?

0 投票
1 回答
611 浏览

ruby - Eventmachine:收到未知签名的 ConnectionUnbound

当我在 Fedora 12 中启动服务器时,在 Ubuntu 9.10 中启动一个客户端。客户端收到此错误消息。但是当我在 Ubuntu 9.10 中启动服务器时,它是好的,在 Fedora 12 中是一个客户端。我已经关闭了防火墙。