其实就是 ruby event based asynchronous server, 服务器/客户端用web sockets通信的
传统的网络服务器(Apache等)都是基于同步处理(客户端发Request,服务器处理, 返回结果)。 这样的结果是一个客户端的读写操作会占用服务器系统资源,是得其他客户端得请求要等待其结束才能被处理,或者只能多线程。 异步处理采用基于事件得方式,实现反应器得的样式(reactor pattern). 服务器接到请求后交给后台处理, 然后立刻接下一个请求, 后台处理好之后服务器受到通知,然后再以回叫(callback)的方式通知客户端。
举个呼叫中心的例子:
同步服务器:
客户: 我要找xxx资料
接线员: 你等一下啊别挂。。 我让同事(后台服务)帮我找找看。。 (10分钟后) 找到了。。 你的资料是xxx
客户:谢谢
异步服务器:
客户1:我要找xxx资料
接线员: 知道了。挂电话吧, 找到我给你打回去 。 。。 那谁(后台服务),帮我找xxx
客户2:我要找yyy资料
接线员: 知道了。挂电话吧, 找到我给你打回去 。 。。 那谁(后台服务),帮我找yyy
...
可见异步是非常有效的方式,可以是服务器能同时处理的请求大大增加。 非常适用于即时网络(real time web), 多用户互动游戏等应用上。 其具体的实现方法有很多种, Socket.io, Python有Twisted, Ruby有基于EventMachine的Coolio, 再高层的抽象有Express.js, Cramp / Goliath等等. 还有商业的应用比如Pusher
我做了些研究, 觉得最方便好用的还是Faye - 同时支持Node 和Ruby, 基于Rack,可做中间件, 很方便和Rails集成。
讲了这么多。。 我这周末准备用Faye做一个多用户的贪吃蛇游戏, 便做边学习异步。用到的技术会有 Rails, Faye, HTML5 (drawing and web sockets), jQuery, javascript等。 如果有人想一起学习, 可以报个名,我们可以约下时间一起做, 在网上找个聊天室或者IRC即时交流。
新手/中手不要害怕, 只要你有Rails基础就可以来做, 我可以帮助大家。。。高手们,我们需要你们
一些阅读资料
http://www.slideshare.net/igrigorik/event-driven-architecture-meshu-ilya-grigorik
http://railscasts.com/episodes/260-messaging-with-faye
http://faye.jcoglan.com/
http://www.slideshare.net/ismasan/websockets-and-ruby-eventmachine
http://diveintohtml5.org/