前段时间项目要实现群聊系统,项目是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主题。安装将...
通过这个列表,开发者可以快速找到适合自己项目的Gem,极大地丰富了Rails的生态系统,提高了开发效率和代码质量。在使用这些Gem时,记得阅读其文档,了解使用方法和注意事项,以便更好地融入到自己的项目中。
Gem 是 Ruby 的包管理器,用于安装和管理各种库和框架,包括 Rails。如果你无法通过网络升级或安装 Rails,可以采用本地安装包的方式。以下是对 Rails 2.3.2 Gem 本地安装包及其使用说明的详细解读。 1. **Rails ...
ROR安装的最版本的GEM,ruby on rails即ROR
版本为: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
"rails-2.1.0-gem"是Rails框架的一个特定版本,即2.1.0的gem包,用于在Ruby环境中安装和管理Rails框架。 Rails的核心理念是“约定优于配置”(Convention over Configuration),这意味着开发者可以遵循一套预设的...
标题中的“rails飞信 gem plugin api 插件的问题解决方案”涉及到的是在Ruby on Rails框架下,使用特定的gem(一种Ruby的库或插件)来集成飞信API时遇到的问题及解决方法。飞信是中国移动推出的一种即时通讯服务,...
是我搭建redmine过程中所使用到的资源,因为感到很多东西不太好找,所以给上传上来,供自己和大家使用。
Rails3消息队列系统 Sidekiq
这个gem包是Rails 2.1.0版本的源代码和相关库的集合,允许开发者在他们的项目中引入这个特定版本的Rails。下面将详细讨论Rails 2.1.0中的关键特性、改进和对开发者的重要意义。 首先,Rails 2.1.0 引入了Action...
Fepss开发的免费OA系统也受到中小型企业的青睐,本公司网站发布系统是基于ruby on rails开发的,这也是国内首款开放源码的基于rails开发的网站系统。 本网站系统是作为OA系统的前端展示系统,所倚赖的包都在plugin...
在Rails中,我们通常使用特定的gem来连接不同的数据库系统,对于Oracle而言,这个gem通常是`ruby-oci8`或`activerecord-oracle_enhanced-adapter`。 在Rails 2.1时代,开发者需要安装和配置这些gem来确保Rails应用...
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或将其自己安装为: $ ...
2.进入rails目录使用gem命令安装(这一步必须要上一步已经安装成功)。如果安装不成功使用ruby,如下: ruby -S gem install rails-2.2.2.gem 3.复制libmySQL.dll到ruby的安装目录的bin文件夹下,然后使用gem安装...
rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...