我有这个密码:
def create
message = Message.new(text: params[:message][:text], author: params[:message][:author])
if message.save
render json: {result: 'success'}
else
render json: {result: 'failure'}
end
end
我的客户订阅了Faye服务器:
var subscription = client.subscribe('/foo', function (message) {
getMessages();
});
我想在创建消息时向Faye发布一些消息。如Faye Ruby服务器文档中所列,我必须这样做:
require 'eventmachine'
EM.run {
client = Faye::Client.new('http://localhost:9292/faye')
client.subscribe('/foo') do |message|
puts message.inspect
end
client.publish('/foo', 'text' => 'Hello world')
}
但是当我将这段代码粘贴到我的
create
方法中时,它会用eventmachine阻塞rails线程,服务器不再工作。当我使用
client.publish
而不使用EventMachine
时,会得到一个错误。如何从服务器发布到Faye我知道有一些宝石像
faye-rails
或private_pub
,但我想自己弄清楚怎么做有没有办法集成EventMachine和Rails也许我应该在另一个线程上运行EventMachine? 最佳答案
我没有使用事件机,但我在rails中使用fay web socket,我使用瘦web服务器来显示我的应用程序通知。
首先将这一行添加到Gemfile中
gem 'faye'
gem 'thin'
现在!对install gem运行bundle install命令
附属国。
创建一个faye.ru文件并添加给定的行(一个用于运行的rackup文件
Faye服务器)。
require 'rubygems'
require 'thin'
require 'faye'
faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
run faye_server
现在将行添加到application.erb文件
<%= javascript_include_tag 'application', "http://localhost:9292/faye.js", 'data-turbolinks-track' => true %>
创建一个名为broadcast或
适合您在
websoket.rb
(首先创建websoket.rb文件内部。
module Websocket
def broadcast(channel, msg)
message = {:channel => channel, :data => msg}
uri = URI.parse("http://localhost:9292/faye")
Net::HTTP.post_form(uri, :message => message.to_json)
end
end
现在在您想要的模型或控制器中使用此方法。
在我的例子中,我在**notification.rb中使用这个来发送通知。**
例子
after_create :send_notificaton
def send_notification
broadcast("/users/#{user.id}", {username: "#{user.full_name }", msg: "Hello you are invited for project--| #{project.name} | please check your mail"})
end
对于订户
<div id="websocket" style="background-color: #999999;">
</div>
<script>
$(function () {
var faye = new Faye.Client('http://localhost:9292/faye');
faye.subscribe('/users/<%= current_user.id %>', function (data) {
$('#websocket').text(data.username + ": " + data.msg);
});
});
</script>
现在!使用终端运行faye.ru文件
rackup faye.ru -s thin -E prodcution
详细情况
Faye websocket