rails开发利器:简单的push服务器 faye
2011-11-11 14:14
671 查看
使用环境
rails3, jquery, faye,jquery-rails, nofity-generator
资料
http://faye.jcoglan.com/ https://github.com/jcoglan/faye http://railscasts.com/episodes/260-messaging-with-faye https://github.com/ryanb/railscasts-episodes/blob/master/episode-260/chatter-after
init project
修改database.yml 和 Gemfile文件
bundle
运行jquery-rails
修改config/application.rb
生成脚手架
修改表单
增加_message.html.erb页面
修改new.html.erb页面
修改controller
新建create.js.erb文件
install faye
vim faye.ru
运行faye服务器
加入js代码
修改application.js文件
修改application_helper.rb
模拟发送消息的方法:
修改create.js.erb文件
加入token,增强安全
新建config/initializers/faye_token.rb
修改faye.ru服务器,增加验证
修改applicaton_helper.rb的broadcast方法
思路总结:
1.ruby代码向faye服务器发送一段js代码
2.faye在监听,扩送到其他的监听client
3.其他的client执行该段js代码
以前项目一直用juggernaut,但是juggernaut实在太笨重了,安装起来特别麻烦,而且对服务器端没有任何的控制。faye是一个非常不错的轻量级替代方案。
至于性能和稳定性,还需要额外的测试
这个项目可以扩展的
项目源代码地址
https://github.com/chucai/chatter
http://faye.jcoglan.com/
rails3, jquery, faye,jquery-rails, nofity-generator
资料
http://faye.jcoglan.com/ https://github.com/jcoglan/faye http://railscasts.com/episodes/260-messaging-with-faye https://github.com/ryanb/railscasts-episodes/blob/master/episode-260/chatter-after
init project
rails new chatter --database=mysql -J
修改database.yml 和 Gemfile文件
gem 'mysql' gem 'jquery-rails' gem 'nifty-generators', :group => :development
bundle
bundle install
运行jquery-rails
rails generate jquery:install --ui
修改config/application.rb
config.action_view.javascript_expansions[:defaults] = %w(jquery jquery-ui jquery_ujs)
生成脚手架
rails g nifty:scaffold Message content:string
修改表单
<%= form_for @message, :remote => true do |f| %> <p> <%= f.text_field :content %> </p> <p><%= f.submit "Send Message" %></p> <% end %>增加remote,ajax访问
增加_message.html.erb页面
<li> <span class="created_at"><%= message.created_at.strftime("%H:%M") %></span> <%= message.content %> </li>
修改new.html.erb页面
<% title "Chat" %> <ul id="chat"> <%= render @messages %> </ul> <%= render 'form' %>
修改controller
def new @message = Message.new @messages = Message.all end def create @message = Message.create!(params[:message]) end
新建create.js.erb文件
$("#chat").append("<%= escape_javascript render(@message) %>"); $("#new_message")[0].reset();
install faye
gem install faye
vim faye.ru
require 'faye' faye = Faye::RackAdapter.new(:mount => '/faye', :timeout => 25) faye.listen(9292) run faye #注意,mount参数会决定文件的名称,比如 :mount => "/test", 那么引用js文件的时候,应该是 http://host.name:port/test.js
运行faye服务器
rackup faye.ru -s thin -E production
加入js代码
http://192.168.1.21:9292/faye.js
修改application.js文件
$(function(){ var client = new Faye.Client('http://192.168.1.21:9292/faye'); client.subscribe("/messages/new",function(data){ eval(data); }); });
修改application_helper.rb
require "net/http" module ApplicationHelper def broadcast(channel,&block) message = {:channel => channel, :data => capture(&block)} uri = URI.parse("http://192.168.1.21:9292/faye") Net::HTTP.post_form(uri, :message => message.to_json) end endcapture方法,是把一段block转换成一个变量
模拟发送消息的方法:
curl http://localhost:9292/faye -d 'message={"channel":"/messages/new","data":"hello"}'
修改create.js.erb文件
<% broadcast "/messages/new" do %> $("#chat").append("<%= escape_javascript render(@message) %>"); <% end %> $("#new_message")[0].reset();
加入token,增强安全
新建config/initializers/faye_token.rb
FAYE_TOKEN = "anything"
修改faye.ru服务器,增加验证
require 'faye' require File.expand_path('../config/initializers/faye_token.rb', __FILE__) class ServerAuth def incoming(message, callback) if message['channel'] !~ %r{^/meta/} if message['ext']['auth_token'] != FAYE_TOKEN message['error'] = 'Invalid authentication token' end end callback.call(message) end end faye = Faye::RackAdapter.new(:mount => '/faye', :timeout => 25) faye.add_extension(ServerAuth.new) faye.listen(9292) run faye
修改applicaton_helper.rb的broadcast方法
def broadcast(channel,&block) message = {:channel => channel, :data => capture(&block),:ext => {:auth_token => FAYE_TOKEN}} uri = URI.parse("http://192.168.1.21:9292/faye") Net::HTTP.post_form(uri, :message => message.to_json) end
思路总结:
1.ruby代码向faye服务器发送一段js代码
2.faye在监听,扩送到其他的监听client
3.其他的client执行该段js代码
以前项目一直用juggernaut,但是juggernaut实在太笨重了,安装起来特别麻烦,而且对服务器端没有任何的控制。faye是一个非常不错的轻量级替代方案。
至于性能和稳定性,还需要额外的测试
这个项目可以扩展的
项目源代码地址
https://github.com/chucai/chatter
http://faye.jcoglan.com/
相关文章推荐
- rails开发利器:视频播放插件plugin(如何开发一个简单的插件)
- rails开发利器:google map 简单可重用的代码
- rails开发利器:如何给苹果PushServer发送消息rails for apple_push_notification
- Android开发之简单的聊天室(客户端与服务器进行通信)
- ElasticBox: 丢掉服务器吧 开发网络应用是如此的简单
- rails开发利器:时刻监控我们的程序错误rails exception_notification
- rails开发利器之rails性能调优
- [iOS开发必备工具之]简单的全景展示利器panoramagl
- rails开发利器之插件开发-acts_as_xxx method 开发
- 快速掌握DWR开发图解-4 Reverse Ajax,服务器推技术实现简单聊天
- 自己开发简单web服务器一(C++开源库websocketpp实现)
- rails开发利器-如何为表增加索引add_index for tables
- javaweb开发基础及Tomcat服务器的简单使用、配置
- Python在web开发中简单服务器的搭建与运行问题
- rails开发利器:vim编辑器安装-工欲善其事必先利其器。
- rails开发利器之插件开发-migrations
- 用java开发一个简单的web服务器
- 开发简单的 ASP.NET 服务器控件
- SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流
- 服务器开发之简单的TCP回射服务器(一):服务器程序