论坛首页 编程语言技术论坛

报名了: 本周末学习用Ruby写基于事件的异步服务器

浏览 13699 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-25  

其实就是 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/

 

 

 

 

 

 

 

   发表时间:2011-05-25  
还有, 最后所有代码公开,大家可以共享讨论 。

能不能做出来,做的好不好都无所谓, 主要是用这个机会学习交流。
0 请登录后投票
   发表时间:2011-05-25  
如果只考虑HTML5的websocket的话这样的应用做起来很简单。
如果想兼容不支持HTML5的浏览器,前端用socket.io不错。不过socket.io目前只有nodejs的后端。
想用ruby做后端的话需要自己去处理各种transport:
引用
WebSocket
Adobe Flash Socket
ActiveX HTMLFile (IE)
XHR with multipart encoding
XHR with long-polling
JSONP polling (for cross-domain)

有个Socket.IO-rack的项目(https://github.com/markjeee/Socket.IO-rack)。
0 请登录后投票
   发表时间:2011-05-26  
Hooopo, 不会太难, 应该几个小时可以搞定。我想就是基于HTML5的Web Socket, 主要目的也就是学习,不是当作产品去开发。

Socket.io应该是Web Client 做的最好的,但如你所说它需要Node的服务器。。 我其实觉得就语言来讲JavaScript最适合写事件服务器的, Ruby并不有最好做反应器的编程模式。有机会我会做个Node的应用试试。

Faye比较吸引我的是因为基于Rack, 而且看起来要比直接用em-websocket要方便的多。 还有就是做出来可以放在Heroku上面,不需要花钱Host.

要不要一起做?

0 请登录后投票
   发表时间:2011-05-26  
对这个主题很感兴趣,不过这周没时间啊,周末要搬家:-)
0 请登录后投票
   发表时间:2011-05-26  
good idea:)等待公布irc
0 请登录后投票
   发表时间:2011-05-26  
很感兴趣 不过偶是新手 可以伐
0 请登录后投票
   发表时间:2011-05-26   最后修改:2011-05-26
最近正好在研究rails+comet,LZ算我一个
分享的一些资源很给力,学到了很多。
0 请登录后投票
   发表时间:2011-05-26  
看起来很有意思,目前没有做过有关异步的应用,报个名
0 请登录后投票
   发表时间:2011-05-26  
0 ruby 可以报名吗?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics