最近在玩websocket,看了一下rails下的websocket方案主要有faye与message_bus等,研究了下感觉message_bus比较好集成,就是文档太少了,于是自己研究了下怎么在rails下使用。
个人原创,版权所有,转载请注明出处,并保留原文链接:
https://www.embbnux.com/2015/11/25/rails_use_message_bus_for_websocket_real_time/
一、添加message_bus到rails
添加gem ‘message_bus’到Gemfile, bundle install安装,重启rails
redis配置: config/initializers/message_bus.rb
MessageBus.redis_config = { url: "redis://127.0.0.1:6379/1" }
二、message_bus主机和客户端
message_bus分为主机和客户端,主机发送信息,而客户端订阅信息
这里的服务器为主机,用于向客户端发布信息,环境为ruby, rails
由于是网站,所以客户端为浏览器,环境即js
主机可以在数据after_save的时候向订阅用户客户端发送信息
三、实现
rails里面: models/message.rb
after_create :notify_has_new_message private def notify_has_new_message data = { message: self.content } MessageBus.publish "/real_time_channel/#{to_user.id}", data end
assets/javascripts/application.js:
//= require message-bus if(window.App.user.is_login){ MessageBus.start(); MessageBus.callbackInterval = 500; MessageBus.subscribe("/real_time_channe/1", function(data){ alert(data.message); }); }
四、进一步
基本的使用上面就可以了,为了安全,可以给每个用户分配一个access_token,订阅的频道就不用id来区分不同用户了。
部署的时候,puma unicorn等还需进一步配置,请查看官方readme