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

ruby-on-rails - 如何在 Rails 应用程序“内部”生成 EventMachine?

我有一个 Rails 应用程序,并希望为其添加某种 WebSocket 支持。从各种谷歌搜索来看,基于 Ruby 的最佳 WebSocket 解决方案似乎是在 EventMachine 上运行的em-websocket 。

我想知道是否有办法将 EventMachine 反应器“集成”到 Rails 中?我在哪里放置初始化代码?这是完成此任务的正确方法吗?

我见过这个例子,它依靠 Sinatra 来执行 EventMachineGET请求,但这并不是我想要的。

任何帮助表示赞赏。

0 投票
1 回答
841 浏览

ruby - tcp 客户端无法从 eventmachine 接收数据

有代码,客户端:

服务器:

客户端不能打印任何东西

0 投票
3 回答
2049 浏览

ruby - EventMachine的优势是什么

这是我的测试用例,我发现EM并不比一般的TCP服务器快

EM 服务器:

和我的基准测试:

0 投票
1 回答
1072 浏览

ruby - 带有事件驱动程序的 Redis multi/exec

您如何在事件 Redis 驱动程序中使用MULTI/ EXEC(和),例如(使用 EventMachine 的 Ruby 驱动程序)?如果我运行:WATCHem-hiredis

如果有EXEC很多事情发生(例如,假设我有一个计时器每秒增加一些键,并且上面的代码需要运行超过一秒,那么一些增量命令将作为MULTI/的一部分发送EXEC——如果我想中止事务怎么办?然后任何碰巧成为它一部分的增量都会消失。很容易出现更糟糕的情况)。

我想我可以实现某种锁定,以便在MULTI/EXEC正在进行时无法执行其他操作,但这感觉不是一个很好的解决方案,还有其他人找到更好的方法吗?

0 投票
4 回答
5615 浏览

ruby - 使用 postgresql gem 异步

我正在使用Goliath(由 eventmachine 提供支持)和 postgres gem pg,目前我正在以阻塞方式使用 pg gem:(conn.exec('SELECT * FROM products')例如)我想知道是否有更好的方法来连接到 postgres数据库?

0 投票
1 回答
1224 浏览

ruby-on-rails - 模型中的 Rails 异步处理

我的 rails 应用程序有一个简单的模型链接,它跟踪与更新关联的所有 Url。

但在我创建对象之前,我想摆脱任何 url 缩短,出于各种原因,比如链接的寿命,以及总体上不喜欢缩短器。

目前我的 longenate 函数非常幼稚(仍在开发,所以它应该是:)),并且由于它在请求期间阻塞而造成了相当大的瓶颈,如果一次创建相当多的更新可能会很长一段时间,通常会创建几十个。由于更新/链接等需要快速显示给用户,这是一个问题。

我想把它换成非阻塞的东西。我熟悉 eventmachine,并用它来创建一些简单的服务和消费者,但对 rails 还是比较陌生。对于这样的事情,最好的 Rails 方法是什么?一个“最终确定”功能,其中包括一个事件机器循环,以一次延长/创建所有链接,或者可能在模型中(以某种方式)执行,以便在创建一个异步任务时分拆异步任务?

感谢您的任何建议/资源

0 投票
1 回答
142 浏览

ruby - 任何想法如何创建参数化流 api?

我想创建参数化流 api,例如http://dev.twitter.com/pages/streaming_api_methods#statuses-filter

我看到的直接方法如下:

  1. 为消息创建 redis 通道(如 twitter 状态)。
  2. 每个连接的套接字都订阅此通道。
  3. 在 redis 回调中,每个套接字检查当前消息是否符合提供的参数(参数可以设置为单独的套接字消息)

你们觉得呢?

0 投票
4 回答
4176 浏览

heroku - 在 Heroku + Sinatra + Twitter 流 API 上运行 EventMachine Worker?

我试图了解使用 Sinatra 在 Heroku 上运行 eventmachine 所涉及的异步模式。简而言之,我想要实现的是:使用em-http创建对 twitter 流 api 的 http 请求,在回调上,使用 websockets 解析推文并将其推送到客户端。到目前为止,一切都很好。当同一个应用程序也需要为网页提供服务时,就会出现问题。在我的 config.ru 中,除了其他 Bundler 的东西,我还有,

然后在我的应用程序文件中,EM 块:

现在,似乎正在发生的事情是运行 TwitterApp永远不会到达,因为 EventMachine 使用 Reactor 模式并且永远不会返回。

或者,如果我尝试做一个

在 EM.run 块中,一切都在本地运行良好并使用ruby​​ app.rb运行,但使用rackup似乎运行服务器两次(一次使用 Thin,另一次使用 WEBrick)并且在 Heroku 上它崩溃了

我在这里错过了一些非常微不足道的东西吗?

非常感谢!

0 投票
1 回答
1736 浏览

javascript - 为什么 EventMachine 比 Node 慢这么多?

至少在我的具体情况下。此处不作一般性陈述。

我有这个用 Node.js 编写的网络爬虫。我很想改用 Ruby,所以我在 EventMachine 中重新编写了它。由于原始版本是在 CoffeeScript 中,它实际上非常简单,而且代码非常相似,除了在 EventMachine 中我实际上可以捕获异常并从异常中恢复(因为我使用的是 Fiber)。

问题在于,在 Node.js 代码上运行不到 20 秒的测试在 EventMachine 上运行时间长达 5 分钟或超过 5 分钟。当我观察连接计数时,它们几乎看起来甚至没有并行运行(它们排队成数百个,然后非常缓慢地向下工作),尽管日志记录显示代码点并行命中的。

我意识到没有代码你不能真正知道到底发生了什么,但我只是想知道是否存在某种潜在的差异,我应该放弃,或者他们是否真的应该能够以同样快的速度运行(a小幅减速很好),我应该继续努力找出问题所在。

我做了以下,但它似乎并没有真正产生任何影响:

哦,我确定我在 EventMachine 中没有任何阻塞调用。我已经对每一行进行了大约 10 次梳理,寻找任何可能阻塞的内容。我所有的网络调用都是 EM::HttpRequest。

0 投票
2 回答
689 浏览

ruby - 为 Ruby 编写正确的 Eventmachine 代码?

我正在尝试了解 Eventmachine。

我有一个服务器:

还有一个客户:

这就是我想知道的:数据库访问往往比较慢,那么我应该如何重写那GenericModel.create!行代码以避免减慢我的反应器循环?