前段时间项目要实现群聊系统,项目是ruby on rails写的,后来就选择了faye,faye是一个实时推送的服务器,如果不知道faye,建议去官网了解下,http://faye.jcoglan.com/ 折腾了挺长时间,记录一下遇到的坑,以防以后在碰到了,或者能给需要的人看。碰到最大的坑就是要标记在线用户的信息。
首先在Gemfile 中添加
gem 'faye-rails'
gem 'thin' //我用的是通过thin来跑的服务器
并且在applation.js中添加
//=require faye
我一开始是通过在applation.rb中进行配置让faye 和rails一起启动,本地跑的没有问题,但通过nginx部署到服务器的时候会开启不了服务,后来我把faye server独立出来,在工程目录下新建faye.ru文件,文件噢诶之如下
require 'faye' require File.expand_path('../config/initializers/faye_token.rb', __FILE__) require 'active_record' require 'mysql2' require 'yaml' Faye::WebSocket.load_adapter('thin') RAILS_ENV = ENV['RACK_ENV'] require File.expand_path('../app/models/user_chat_room.rb', __FILE__) environment = ENV['RACK_ENV'] || 'production' dbconfig = YAML.load(File.read('config/database.yml')) //添加database ActiveRecord::Base.establish_connection(dbconfig[environment]) faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 60) // class MarkOnline def incoming(message, callback) faye_client ||= Faye::Client.new('http://localhost:9292/faye') if message['channel'] == '/meta/subscribe' if message['data'] != nil UserChatRoom.mark_on_line( message['data']['user'], //登陆上线 message['data']['id'], message['data']['sex'], message['clientId'] ) online_user = UserChatRoom.current_online faye_client.publish('/message', online_user) //把上线人的信息push给所有人 end elsif message['channel'] == '/meta/disconnect' UserChatRoom.mark_off_line(message['clientId']) online_user = UserChatRoom.current_online //下线 faye_client.publish('/message', online_user) end callback.call(message) end end faye_server.on(:disconnect) do |client_id| //每60秒监测一次,如果连接已断,把这个人的信息删除下线 UserChatRoom.mark_off_line(client_id) faye_client ||= Faye::Client.new('http://localhost:9292/faye') online_user = UserChatRoom.current_online faye_client.publish('/message', online_user) end faye_server.add_extension(MarkOnline.new) run faye_server
applation.html.erb中添加
<%= javascript_include_tag 'application',"http://#{request.host}:9292/faye.js" 'data-turbolinks-track' => true %>
前台js
client = new Faye.Client('http://' + document.domain + ':9292' + '/faye'); // new 监听事件
client.subscribe('/chat', function (payload) { //接收server传来的消息 } client.publish('/chat', { //向server push消息 });
后来又为聊天添加了表情,以及图片,原理都一样,图片是通过二进制流来传输,表情就是类似chat表情一样,参考的文章是nodejs
http://www.cnblogs.com/wayou/p/hichat_built_with_nodejs_socket.html
相关推荐
adminlte-rails, AdminLTE Rails gem 将AdminLTE主题与 Rails 资产管道集成 AdminLTE Rails gem AdminLTE 是后端的高级 Bootstrap 主题。英镑 AdminLTE Rails gem 与 Rails 资产管道集成了英镑AdminLTE主题。安装将...
awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版
react on rails gem 官方教程.....
rails on ruby 4.1.2相关的GEM安装包
ROR安装的最版本的GEM,ruby on rails即ROR
如果无法通过网络升级rail,可以通过本地安装包进行安装,内有使用说明
版本为:rails-2.3.8.gem 可使用指令安装:gem install rails-2.3.8.gem
rails-2.3.5.gem redmine必须gem
基于java的开发源码-Rails3消息队列系统 Sidekiq.zip 基于java的开发源码-Rails3消息队列系统 Sidekiq.zip 基于java的开发源码-Rails3消息队列系统 Sidekiq.zip 基于java的开发源码-Rails3消息队列系统 Sidekiq.zip ...
rails4gems.part3.rar rails4常用gem3
ruby on rail的rails的gem,版本2.1.0
Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 ...
是我搭建redmine过程中所使用到的资源,因为感到很多东西不太好找,所以给上传上来,供自己和大家使用。
Rails3消息队列系统 Sidekiq
ruby on rails 版本2.1.0 gem 包
Fepss开发的免费OA系统也受到中小型企业的青睐,本公司网站发布系统是基于ruby on rails开发的,这也是国内首款开放源码的基于rails开发的网站系统。 本网站系统是作为OA系统的前端展示系统,所倚赖的包都在plugin...
jquery-rails, 一个 gem,用于自动使用jQuery和 Rails 3 railsjQuery 面向 Rails 如此伟大。这里 gem 提供:jQuery 1.7.2jQuery UI 1.8.18 ( 仅适用于 javascript )jQuery UJS适配器assert_select_j
安装将捕鼠器宝石添加到应用程序将此行添加到您的应用程序的Gemfile中: gem 'mousetrap-rails' 然后执行: $ bundle install运行发电机$ rails generate mousetrap:install 它将在app/assets/javascripts创建一个...
基于浏览器的Excel在rails gem中。 Excel可以以html显示RailsHandsontable 该gem是为rails用户创建的。安装将此行添加到应用程序的Gemfile中: gem 'rails_handsontable'然后执行: $ bundle或将其自己安装为: $ ...
rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...