我在我的 Rails 2.1 应用程序上使用 faye。并且在测试和修复了许多事情之后faye ruby client
都无法正常工作。
这是我的服务器代码。
require 'faye'
server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
EM.run {
thin = Rack::Handler.get('thin')
thin.run(server, :Port => 9292)
server.bind(:subscribe) do |client_id, channel|
puts "[ SUBSCRIBE] #{client_id} -> #{channel}"
end
server.bind(:unsubscribe) do |client_id, channel|
puts "[UNSUBSCRIBE] #{client_id} -> #{channel}"
end
server.bind(:disconnect) do |client_id|
puts "[ DISCONNECT] #{client_id}"
end
}
这是我的客户端 JS 代码。
<script type="text/javascript">
var client = new Faye.Client('http://localhost:9292/faye');
client.subscribe("/faye/new_chats", function(data) {
console.log(data);
});
</script>
这是 ruby 客户端代码。
EM.run do
client = Faye::Client.new('http://localhost:9292/faye')
publication = client.publish("/faye/new_chats", {
"user" => "ruby-logger",
"message" => "Got your message!"
})
publication.callback do
puts "[PUBLISH SUCCEEDED]"
end
publication.errback do |error|
puts "[PUBLISH FAILED] #{error.inspect}"
end
end
服务器,JS工作正常。但是 Ruby 客户端代码不起作用。如果我在没有EM的情况下编写它,它会向我显示错误Event Machine not initialized
。如果我把它写进去,EM
它可以工作,但会拖累红宝石进程。如果我放在EM.stop
客户端代码的末尾,它会执行但不发布消息。
我该如何解决这个问题?