Articles of eventmachine

良好的实时/并行HTTP爬虫库/平台?

我正在构build一个爬虫程序,可以从多个网站并行获取信息,以响应客户对这些信息的请求。 我需要从10-20个网站请求特定的页面,parsing他们的内容以获取特定的信息片段,并尽快将这些信息返回给客户端。 我想asynchronous执行,所以客户端在第一个结果准备就绪的时候显示第一个结果,而其他的请求仍然在等待处理。 我有一个Ruby背景,因此更愿意在Ruby中构build解决scheme – 但是,并行性和速度正是Ruby不为人知的。 我相信像EventMachine和Typhoeus这样的图书馆可以弥补这一点,但我也强烈地考虑node.js ,因为我知道javascript很好,似乎是为这样的事情而构build的。 无论我select什么,我也需要一种有效的方式将结果传达给客户。 我正在考虑简单的AJAX(但这将需要轮询服务器),networking套接字(但这将需要回退旧版本的浏览器)和持久的客户端/服务器通信的具体解决scheme,如抽筋 , 剑圣和推者 。 有没有人有任何经验和/或build议,他们想分享?

在逻辑上什么是线程中的事件循环?

我遇到了node.js和python's tornado与Apache 。 他们说 : Apache为每个连接创build一个线程。 Node.js & tornado实际上是在线程上进行事件循环,而单个线程可以处理多个连接。 我不明白,逻辑上是一个线程的孩子。 在计算机科学方面: 进程具有隔离内存,并与上下文切换共享CPU。 线程划分一个进程。 因此,具有多个控制点的过程是由多个线程实现的。 现在, 什么event loop在一个线程下工作? 如何处理一个线程控制下的不同连接? 更新: 我的意思是如果在一个线程下有3个套接字进行通信,那么1个线程怎样才能与3个套接字进行通信,而不会让任何人等待呢?

性能testingTwitter Streaming API消费者

我有一个使用Twitter Streaming API实时使用twitterpost的服务。 我build立了一个连接到stream的后台进程,并将推送到Redis中。 这是用node.js构build的 我需要做的是找出这个过程可以消耗的最大数量的鸣叫。 我需要性能testing这个设置。 什么是testing这个最好的方法? 我需要知道: 它可以处理之前,它可以处理多less鸣叫 当进程不能处理更多的推文时会发生什么 另一个我想这样做的原因是要弄清楚它是否值得使用node.js。 我宁愿用EventMachine代替它。

Ruby非阻塞库vs Node

我正在评估Ruby EventMachine(以及类似的非阻塞框架,比如Cramp)和Node.js. 我之前和Node一起工作过,但从来没有和EventMachine合作过。 Ryan Dahl鼓励的观点之一是,JavaScript中的图书馆生态系统必须是类似的非阻塞的,以促进这一点。 这是为什么Node是从零开始开发的一部分。 我的问题是,你可以在没有阻塞的情况下使用Ruby吗? 我的假设是EventMachine单独通常不足以构build完整的Web应用程序堆栈。 如果是这样的话,Ruby中的其他库还能提供非阻塞IO(即用于数据库/文件系统/ http访问)?

为什么EventMachine比Node慢得多?

在我的具体情况下,至less。 不要在这里做一般的陈述。 我已经有了我在Node.js中编写的这个networking爬虫。 我很乐意使用Ruby,所以我把它重写在EventMachine中。 由于原来是在CoffeeScript,它实际上是惊人的容易,代码是非常相同的,除了在EventMachine我可以实际陷阱和exception恢复(因为我使用光纤)。 问题是Node.js代码在20秒内运行的testing在EventMachine上花费了5分钟甚至更多。 当我看到连接计数时,几乎看起来他们甚至没有平行运行(他们排队到数百,然后非常缓慢地下降),虽然日志显示代码点是平行命中的。 我意识到,没有代码,你不能真正知道到底发生了什么,但我只是想知道是否有某种根本性的差异,我应该放弃,或者如果他们真的应该能够运行一样快小的放缓是好的),我应该继续尝试找出问题所在。 我做了以下,但它似乎没有任何影响: puts "Running with ulimit: " + EM.set_descriptor_table_size(60000).to_s EM.set_effective_user('nobody') EM.kqueue 哦,我非常肯定,在EventMachine中没有任何阻塞呼叫。 我已经梳理了大约10次寻找任何可能阻挡的东西。 我所有的networking电话都是EM :: HttpRequest。

为什么Rails不能完全支持把写出来的代码写出来

在Node.js出来之后,这是推广编程的一件事情。 但是,Ruby确实有EventMachine,它支持编写代码。 在rails中支持事件的要求是: 1.运行反应堆的服务器(薄型,彩虹) 2. Fibers(Ruby 1.9.3)为了使写代码更简单,否则我们可以使用线程。 3.所有的gem均匀(例如mysql2)。 Nodejs显示了编程的明显好处。 那么为什么rails社区不采用eventmachine? 我认为rails不能完全移植到eventmachine的原因之一是因为依赖于底层的gem,这可能并不平坦。 但是有没有人知道是否有计划向这个方向迈进? Rails可以完成Nodejs的工作,但是Nodejs是通过在所有的库制造商中推广编程来实现的,所以按照惯例,你添加到package.json中的大多数依赖关系,你知道它会被调用,并且会和nodejs一起工作盒子。

Ruby EventMachine,Python Twisted或JavaScript Node.js的重点/目的是什么?

我不明白这些框架解决了什么问题。 它们是否替代了像Apache HTTPD,Tomcat,Mongrel等HTTP服务器? 或者他们更多? 为什么我可以使用它们…一些真实世界的例子? 我已经看到了无数的聊天室和广播服务的例子,但是看不出有什么不同,例如,build立一个Java程序来打开套接字并为每个请求分派一个线程。 我想我理解非阻塞I / O,但我不明白这是multithreading的Web服务器。 对于Node.js,我读到它只有一个线程,而且这可能比multithreading更有效率,但是这些框架和传统的Web服务器之间的唯一区别?

EventMachine vs Node.js

我要开发一个协作网站,其中一个function将是实时更改的协作编辑。 即当两个或两个以上的用户正在编辑相同的文档时,他们可以看到彼此的变化,一旦发生。 我有一些Ruby on Rails的经验,所以我在考虑使用EventMachine,但是在Node.js的所有这些炒作,我知道考虑使用它。 那么,使用Node.js而不是EventMachine的主要好处是什么呢? tl; dr EventMachine和Node.js(除了语言)之间的主要区别是什么?