- 浏览: 91583 次
- 性别:
- 来自: 香港
最新评论
-
ddddddddd:
忘记说谢谢了。谢谢您共享这个插件。帮了我大忙
Rails plugin: i18n -
ddddddddd:
我下载并使用了你的插件,感觉效果很好,不向其他同样功能的那样庞 ...
Rails plugin: i18n
AJAX
在 AJAX 出現前,傳統網上軟件的用戶首先要學習的是等待。直到2005 年,Google Suggest 和 Google Map 等網上軟件出現,它們利用 XMLHttpRequest 和 Java Script ,讓網上軟件可以不用重新載入版面就能更新資料。這種即時回應大大改善了網上軟件的用戶體驗,JJG 把這種技術稱之為 AJAX 1。自此 Wep App 終於可以跟傳統軟件較量,AJAX 被認為是 Web 2.0 背後最重要的技術。
Comet
然而仍有一個問題要解決。AJAX 和傳統的網上軟件一樣只能單向地回應使用者的動作。除了由用者主動 polling 外,基本上軟件不能把消息發給用戶。講求群眾互動的 Web 2.0 竟不能作即時通訊,這種限制讓很多軟件也未能發展。2006 年,GTalk 和 Meebo 出現,它們利用持續的 HTTP connection,只用 HTTP 協定就能做到即時通訊的效果,Alex Russell 把這類技術稱之為 Comet 2 — 這不是任何字的簡寫,泛指事件導向、伺服器端 Push 資料的軟件。
Ruby on Rails 和 Web 2.0
Ruby on Rails 本身整合了 Prototype 和 Script.aculo.us ,開發者可以只用 Ruby on Rails 就寫出純正的 AJAX 軟件。相對來說 Comet 的工具在 Rails 上還未成熟,其中最容易的可算是 Juggernaut 。 Juggernaut 會在版面中加入 Flash 的 Juggernaut client ,它會跟 Juggernaut 的 Push Server 保持一個持續的 XMLSocket 連接,以接收 server 傳來的 javascript,用以更新 client 畫面。以下我會示範怎樣用 Juggernaut 做一個 Push 的網站。
系統要求
- Rails 1.1 或以上
- json gem (gem install json)
- eventmachine gem (gem install eventmachine 或 gem install eventmachine-win32)
使用方法
- 開啟一個新 project,安裝 juggernaut:
rails Realtime
cd Realtime
script/plugin install svn://rubyforge.org//var/svn/juggernaut/trunk/juggernaut - 新增一個 layout "apps/view/layout/application.rhtml" ,javascript_include_tag :defaults 一句是基本的 Rails helper , 在安裝 juggernaut 後會自動包括 juggernaut 的 javascript 檔。
<html> <head> <%= javascript_include_tag :defaults %> </head> <body> <%= yield %> </body> </html>
- 新增一個 controller "main":
./script/generate controller main index
- 按需要修改設定檔 "config/juggernaut.yml",暫時我們不用改任何東西。
- 新增一個 view "app/views/main/index.rhtml",form_remote_tag 是基本的 Rails AJAX function,它把 HTML FORM 的動作用 AJAX 送去 Server。listen_to_juggernaut_channels() 讓 client 在載入頁面後連接去指定 channel 接收 push 資料。
<h1>Push Demo</h1>
<%= listen_to_juggernaut_channels(['channel']) %>
<%= form_remote_tag :url => {:action => :push} %>
<%= submit_tag 'Push!' %>
<%= end_form_tag %> - 修改 "app/controllers/main_controller.rb",加入 push method。Juggernaut.send_data() 方法會向所有已連接的 Client 收到訊息。
class MainController < ApplicationController def index end def push Juggernaut.send_data("alert('Hello, world!')", ['channel']) end end
- 是時候測試一下成果!分別啟動 Rails 和啟動啟動 Juggernaut Push Server:
ruby ./script/push_server
Starting Juggernaut Push Server
Port: 15000
Host: 0.0.0.0./script/server
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment…
** Rails loaded. - 試著同時開啟兩個 browser 到 http://localhost:3000/,按下其中一頁的 "Push" 按鈕,兩個 browser 會同時彈出一個 javascript 的 alert message!
- 以上例子中,由 client 到 server 的訊息由 AJAX 發送,由server 到 client 的訊息由 Juggernaut 發送,這樣我們就有一個能雙向、即時通訊的軟件 model,至於怎樣利用這種強大的力量就要由開發者去想了!
- 當然 Juggernaut 還有其他功能,如對單一用戶發訊、動態加入和離開 channel 、用戶認證、以及在用戶開啟和關閉 Browser 時啟動 trigger action 。詳情可以參看 Nicolas Cavigliano 不斷更新的教學。 當然也可以讀 Juggernaut 的源碼 ,特別是 library "vendor/plugins/juggernaut/lib/juggernaut.rb" 和 Push Server "vendor/plugins/juggernaut/media/push_serve"
- 以上例子的源碼可以在此下載
研究 Juggernaut 時遇到的問題
- Flash 對 XMLSocket Connection 有許多限制。Juggernaut 的作者建議把 Push Server 放在 443 port ,讓軟件可以穿過 firewall。然而不知為何我的電腦上無論 Firefox 還是 Safari Flash 也不肯連去 443 port …
- 要注意 juggernaut.yml 的 HOST 和 URL ,如果你設定的是 localhost ,在 browser 中輸入 127.0.0.1 是絕對不會成功的!這是 Flash 的防止 cross site socket 機制。
- Client 和 Push Server 使用 Socket 連結, Rails 跟 Push Server 同樣使用 Socket:所有 Juggernaut 的 function 其實都會叫 Rails 開一個 Socket 連去 Push Server。每次發訊也要一個 Socket 在大型應用似乎不是一個好的想法 。
其他方案
Apache ActiveMQ 的 AJAX Polling 方案,似乎可以做到類似 Pushing 的效果,有待研究。
延申閱讀
发表评论
-
Code Geass CD入手
2007-08-23 14:12 1268終於入手了,Code Geass 的 OST2 和 モザイ ... -
Kaomoji (顔文字, emoticon) plugins for Rails
2007-08-23 16:15 1191Nothing big, just a little toy ... -
調查發現八達通易辦事轉賬系統一直有問題,涉款370萬元
2007-07-27 15:34 1214八達通承認易辦事7年扣錯錢 Via 明報即時新聞 早前,八達 ... -
Ruby on Rails plugin: QRCode
2007-07-23 14:42 1545I come across this page, a java ... -
[轉播] 呼籲:抵制7月25日明光社賣旗活動
2007-07-20 18:07 1188原文 @ 無神論者的巴別塔 慈善,只為幫助有需要的弱勢社群 ... -
Using AjaxMessaging to create a chatroom in 5 mins
2007-07-07 16:41 1255中文版: 用 AjaxMessaging 在五分鐘內造一個 c ... -
用 AjaxMessaging 在五分鐘內造一個 chat room
2007-07-07 17:03 1401English version: Using AjaxMess ... -
AjaxMessaging - bring realtime messaing to Ruby on Rails
2007-07-02 18:22 1409Proudly present my new plugins ... -
Eclipse 發表 Europa
2007-07-02 02:56 1125Eclipse Europa 是今年的 Eclipse 新版本 ... -
Ruby on Rails + AJAX + Mongrel + JMS/MQ/MOM = 即時通訊
2007-07-01 11:59 1589前文研究過利用 Flash XML ... -
更新: Ruby on Rails plugin i18n
2007-06-29 16:59 1312讀了 Takol 的 【ROR開發筆記】MultiLingua ... -
Rails plugin: i18n
2007-06-06 14:23 1443An update from mod-i18n module. ... -
全文搜尋 (Lucene 和 Ferret)
2007-05-20 17:45 1606搜尋器改變了人們的習慣。當有能力在互聯網上用 0.01 秒的搜 ... -
網摘 20070529 - 因為 Rails 放下其他事
2007-05-29 05:45 927網路與技術 RoR vs. PHP?談 web 開發技術的未 ... -
網摘 20070510
2007-05-10 06:01 984Web 微軟500億美元收購Yahoo!之傳言大拆解 - 與 ... -
Adobe 宣佈開放 Flex 的源碼
2007-04-27 03:43 1050重大消息:四月二十六日,Adobe 宣佈他們將會開放 Flex ... -
Defensive Design for the Web
2007-04-22 14:00 1066Defensive Design for the WebHo ... -
Aptana 繼 RadRails 後再宣佈和 RDT 合併
2007-04-21 16:10 1279Aptana 今天宣佈和 RDT 合併,該公司並會僱請 RDT ... -
20070416 網摘 - 知識+世代
2007-04-16 05:25 1028知識+世代 知識+型社會 - 當中學生只懂得使用 Yahoo ... -
Google 發表谷歌輸入法
2007-04-15 02:09 1329之前聽說Google 開放分析一萬億字所得的資料,但那只在英文 ...
相关推荐
Ruby on Rails(简称Rails)是一种流行的Web开发框架,以其“约定优于配置”的理念和高效的开发速度受到开发者喜爱。而Go(Golang)则是一种静态类型、编译型的语言,以其高性能、简洁的语法和强大的并发能力闻名。...
为了运行和测试应用,你需要在命令行中使用Rails服务器。在Aptana中,可以使用内置的终端工具。打开“Terminal”视图,输入`rails server`启动服务器,然后在浏览器中访问`http://localhost:3000`查看你的应用。 在...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
- 安装Rails: 使用gem工具安装最新的Rails版本。 - 测试安装: 创建一个简单的Rails应用来验证是否成功安装。 #### 五、练习作业0-Hello World - **目标**: - 学习如何创建第一个Rails应用程序。 - **过程**: -...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
这一章节将教授如何使用Rails的测试框架进行单元测试、集成测试和功能测试。同时,也会介绍如何对应用进行基准测试,评估其性能表现。 #### 12. Deployment and Production Use(部署和生产使用) 最后,本书将...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
这可以通过使用Rails的身份验证机制,如Devise或Authlogic,实现用户登录和会话管理。 最后,测试是任何Rails应用不可或缺的一部分。使用RSpec进行行为驱动开发(BDD)测试,Rake任务自动化测试执行,确保购物车...
Rails 2.3.2 是一个古老的 Ruby on Rails 框架版本,它在 Ruby 社区中曾经广泛使用。Gem 是 Ruby 的包管理器,用于安装和管理各种库和框架,包括 Rails。如果你无法通过网络升级或安装 Rails,可以采用本地安装包的...
jquery-rails, 一个 gem,用于自动使用jQuery和 Rails 3 railsjQuery 面向 Rails 如此伟大。这里 gem 提供:jQuery 1.7.2jQuery UI 1.8.18 ( 仅适用于 javascript )jQuery UJS适配器assert_select_j
综合以上信息,学习和掌握Rails需要理解其核心组件和设计理念,熟练使用相关工具,阅读源码以加深对框架运作的理解,并通过实践项目来巩固理论知识。Rails是一个强大且高效的Web开发框架,它简化了许多常见的开发...
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
以下是一些关于如何在 Rails3 中使用 rake 启动后台任务的知识点: 1. **Rakefile**: 每个 Rails 项目都有一个 Rakefile 文件,这是 Rake 执行任务的入口点。在这个文件中,你可以定义自定义的任务。 2. **Task ...
5. **Gemfile与Bundler**:Rails项目通常使用Gemfile来管理依赖库,Bundler工具则用于安装和管理这些依赖,确保在不同环境下项目的运行一致性。 6. **Scaffolding**:Rails提供了快速生成基本CRUD(Create, Read, ...
rails-settings, 使用 Ruby on Rails 管理设置 Rails的设置 ruby gem,通过在单独的数据库表中将它们存储为序列化的哈希来处理。 包含命名空间和默认值。要求ruby 1.9.3或者更高版本Rails 3.1或者更高版本( 包括 ...
1. **activesupport-2.1.0.gem**:ActiveSupport是Rails的一个重要库,提供了许多实用的工具和方法,如时间区处理、字符串格式化、数组和哈希操作等。它也包含了一些核心的Ruby扩展,帮助开发者编写更简洁、更具表达...
- **步骤**:通过命令行使用`rails new project_name`来初始化一个新的Rails项目。 - **结构**:新项目将包含默认的目录结构,如`app`、`config`、`db`等,分别用于存放应用程序代码、配置文件、数据库迁移脚本等。 ...