`

rails gem 'faye' 聊天系统

 
阅读更多

    前段时间项目要实现群聊系统,项目是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

 

   

0
0
分享到:
评论

相关推荐

    faye_rails_example

    这是一个演示,展示了如何将 faye 配置为在您的 Rails 应用程序中作为中间件运行。 你可以在heroku 上看到这个 repo 的现场演示 一体化 将 faye 和 thin 添加到Gemfile gem 'faye' gem 'thin' 在config/...

    chat-app:Rails聊天应用程序的基本实现

    本文将深入探讨一个基于Rails的聊天应用——Chat-App,它采用private_pub gem实现了一个类似Gmail的聊天体验。 首先,我们要理解Chat-App的核心组件——private_pub gem。这是一个由Ryan Bates开发的Rails gem,...

    railschat:实时聊天集成

    铁轨实时聊天集成配置基本 rails 应用程序并安装 faye 和 Thin gem 将使您第一次接触到您的聊天应用程序。 Faye js 文件应该在项目根目录下。 Faye.ru 文件将配置与 faye 相关的所有路径。 配置文件夹中 faye 所需的...

    privatepub_server:在 node.js 后端运行 Faye 服务器时为 Rails 使用 private_pub

    您很可能将它与 Rails private_pub gem 一起使用。 请参阅包含的 .env.example 文件。 启动开发服务器:pm2 start server.js --name privatepub 停止服务器:pm2 stop privatepub 部署到 Ubuntu 创建一个 ...

    realtime-rails:实时rails支持。 请参阅网站以获取文档:

    实时支持Rails 注意:此gem是最初在2013年构思并在2014年初作为通用开源项目发布的概念作品。 从2015年中期开始,Rails中将提供对性能,本机和可扩展WebSocket的支持。 看到降落在Rails 5中,可能会在2016年初/中期...

    薄:非常快速且简单的Ruby Web服务器

    gem 'faye-websocket' gem 'thin' # If not already done 创建一个config/initializers/thin_action_cable.rb : Rails . application . config . action_cable . use_faye = true Faye :: WebSocket . load_...

    live-chat:熨斗学校的Mod2项目。 允许用户在实时会话中聊天的聊天

    Ruby on Rails通常与SQLite、MySQL或PostgreSQL等数据库系统配合使用。理解ActiveRecord(Rails的ORM)以及如何设计数据库模型和关系至关重要。 6. **安全性与身份验证**:为了保护用户的安全,项目需要实现用户...

    angelo-ws-heroku:在 heroku.com 上使用 websockets 进行聊天演示

    此外,这个聊天应用可能使用了某个 WebSocket 框架,如 ActionCable(Ruby on Rails 的一部分),或者独立的库如 Faye 或 Pusher。这些框架帮助处理 WebSocket 连接的生命周期,广播消息,并提供订阅/发布机制。 ...

Global site tag (gtag.js) - Google Analytics