`
knwang
  • 浏览: 3122 次
  • 性别: Icon_minigender_1
  • 来自: 硅谷
最近访客 更多访客>>
文章分类
社区版块
存档分类

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

阅读更多

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

 

 

 

 

 

 

 

分享到:
评论
7 楼 prettyinsight 2011-05-26  
最近正好在研究rails+comet,LZ算我一个
分享的一些资源很给力,学到了很多。
6 楼 NCruby 2011-05-26  
很感兴趣 不过偶是新手 可以伐
5 楼 jinleileiking 2011-05-26  
good idea:)等待公布irc
4 楼 Hooopo 2011-05-26  
对这个主题很感兴趣,不过这周没时间啊,周末要搬家:-)
3 楼 knwang 2011-05-26  
Hooopo, 不会太难, 应该几个小时可以搞定。我想就是基于HTML5的Web Socket, 主要目的也就是学习,不是当作产品去开发。

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

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

要不要一起做?

2 楼 Hooopo 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)。
1 楼 knwang 2011-05-25  
还有, 最后所有代码公开,大家可以共享讨论 。

能不能做出来,做的好不好都无所谓, 主要是用这个机会学习交流。

相关推荐

    Ruby-Async是基于nio4r和定时器的Ruby的可组合的异步IO框架

    2. **事件循环(Event Loop)**:Ruby-Async中的事件循环负责管理所有的异步操作,监控I/O事件,并根据需要调用相应的回调函数。事件循环是异步编程的心脏,它确保了所有任务的有序执行。 3. **组合性...

    基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言.zip

    本资料包主要关注的是基于Ruby编程的基础知识和应用,包括如何使用Ruby进行开发和解决问题。 Ruby的设计哲学强调程序员的生产力和代码的可读性。它的语法直观,使得初学者能够快速上手。Ruby的核心特性包括: 1. ...

    叶玎玎:Real Time Solutions with Ruby

    标题“叶玎玎:Real Time Solutions with Ruby”中的“Real Time Solutions with Ruby”明确指出本演讲或文章的主题是关于如何利用Ruby编程语言来实现实时应用解决方案。“叶玎玎”则是演讲者或作者的名字。 #### ...

    Ruby-Geocoder完整的Ruby地理编码解决方案

    在实际项目中,Ruby-Geocoder常与Ruby on Rails框架结合使用,通过配置ActiveRecord模型,可以方便地将地理位置信息存储在数据库中,并实现基于位置的查询。例如,你可以在模型中添加`geocoded_by`和`acts_as_...

    基于Ruby编写的命令行注入版本.zip

    基于Ruby编写的命令行注入版本.zip基于Ruby编写的命令行注入版本.zip基于Ruby编写的命令行注入版本.zip基于Ruby编写的命令行注入版本.zip基于Ruby编写的命令行注入版本.zip基于Ruby编写的命令行注入版本.zip基于Ruby...

    异步事件驱动的RubyWeb应用框架Cramp.zip

    它建立在Ruby的EventMachine库之上,主要用于处理一些大量的开放连接 (如Comet系统或streaming APIs),整个过程都使用event-driven I/O。 Cramp使用Rails 3.0的ActiveSupport 和 ActiveModel库, 它会显示两层用于...

    Ruby-Puma一个Ruby的并发Web服务器

    2. **事件驱动**:Puma利用Ruby的事件库,如libuv或eventmachine,实现非阻塞I/O,使服务器能够高效地处理大量并发连接。 3. **热重启**:Puma支持热重启功能,这意味着在不中断服务的情况下可以更新应用程序代码。...

    ruby学习的源码

    本资料包针对Ruby学习者提供了丰富的资源,对于初学者来说是非常有价值的。 1. **Ruby基础知识**: - 变量:Ruby支持局部变量、实例变量、类变量和全局变量,它们以不同的符号开头,如`@`、`$`等。 - 类与对象:...

    Ruby/tk学习资料

    ### Ruby/tk 学习资料知识点详述 #### 核心概念:Ruby/tk简介与基本操作 ...通过学习如何引入库、创建根窗口、启动事件循环以及使用布局管理器等基本操作,开发者可以快速上手Ruby/tk并进一步探索更多高级功能。

    Ruby-Falcon用于Ruby的高性能web服务器支持HTTP2和HTTPS

    Ruby-Falcon是一个专门为Ruby语言设计的高性能Web服务器,它的出现为开发者提供了在处理高并发、低延迟场景下的优秀选择。Falcon的主要特点是其对HTTP/2协议和HTTPS的支持,这使得它在现代Web服务中具备了高效且安全...

    Ruby-agoo一个用于Ruby的高性能HTTP服务器

    1. 高性能:agoo利用异步I/O和事件驱动的机制,有效地处理大量并发请求,减少了CPU和内存的占用。 2. Websocket与SSE支持:agoo内置对WebSocket和SSE协议的支持,可以轻松构建实时通信的应用。 3. 轻量级:相比于...

    Ruby-CelluloidIO实现的Web服务器

    1. **异步事件驱动**:通过使用Celluloid::IO,Reel可以监听套接字事件,如新的连接、数据到达或连接关闭,这些事件都会触发相应的回调函数,无需等待I/O操作完成。 2. **HTTP/1.1支持**:Reel支持HTTP/1.1协议,...

    Ruby-RubyRetriever异步Web爬虫

    RubyRetriever是一款基于Ruby语言实现的异步Web爬虫工具,它被设计为一个既可以作为命令行程序运行,也可以作为框架供开发者自定义爬取逻辑的解决方案。这个项目的核心特性在于其异步处理能力,这使得它在抓取大量...

    WebServer_SourceCode_Ruby:Web服务器源代码Ruby版-服务器

    1. **事件驱动模型**:Ruby中的Web服务器通常基于事件驱动模型,如WEBrick或Puma。这些服务器使用非阻塞I/O,以高效地处理并发请求。 2. **路由系统**:Ruby on Rails的路由系统将URL映射到控制器的特定动作,是...

    Ruby语言教程.docx

    - **学习建议**:通过本教程学习Ruby的基础知识后,尝试自己编写简单的程序来加深理解。 - **极客教程**: - **链接**:[Ruby 教程 | 极客教程](https://geek-docs.com/ruby/ruby-tutorial/ruby-tutorial.html) ...

    ruby-bank:在 Rails 上学习 ruby

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。"ruby-bank"项目正是一个针对初学者设计的实践平台,...

    Ruby-OurPC是gRPC客户端和服务器的实验性实现

    Ruby-OurPC是一个针对gRPC框架的实验性实现,它为开发者提供了在Ruby环境中构建gRPC客户端和服务器的能力。gRPC是一个高性能、开源和通用的RPC(远程过程调用)框架,它基于HTTP/2协议设计,支持多种编程语言,包括...

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称,被广泛应用于Web开发,尤其是与Ruby on Rails框架结合使用。"Ruby新手学习书"和"Rails_4_days"这两个资源是为初学者设计的,旨在帮助他们快速掌握Ruby语言...

    Ruby-云片短息ruby服务器端api

    "云片短息Ruby服务器端API"就是针对Ruby开发者的SDK,允许他们在服务器端通过编程方式发送短信验证码、通知或营销信息。 首先,我们需要了解如何安装这个SDK。通常,它会以Ruby gem的形式发布,可以通过`gem ...

    一个很棒的用于Ruby的异步事件驱动的React堆。-Ruby开发

    异步是基于nio4r和计时器的可组合的Ruby异步I / O框架。 “最近我一直在研究异步,因为我的一个项目tus-ruby-server会真正受益于非阻塞I / O。实际上,Async是一个基于nio4r和Ruby的可组合的Ruby异步I / O框架。 ...

Global site tag (gtag.js) - Google Analytics