gpt4 book ai didi

javascript - faye ruby​​ 客户端不工作

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:47 24 4
gpt4 key购买 nike

我在我的 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 编写它,它可以工作,但会影响 ruby​​ 进程。如果我将 EM.stop 放在客户端代码的末尾,它会执行但不会发布消息。

我该如何解决这个问题?

最佳答案

你几乎就在那里......你只需要在你的回调中停止 EM 事件循环,就像这样:

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]"
EM.stop_event_loop
end
publication.errback do |error|
puts "[PUBLISH FAILED] #{error.inspect}"
EM.stop_event_loop
end
end

关于javascript - faye ruby​​ 客户端不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com