5

private_pub を使用して、1 対 1 のチャットのようなアプリケーションを実装しています。

これが私の話です: ユーザーとして、パートナーがチャットを離れたときにメッセージを受け取りたいです – ウィンドウを閉じるなど.

ここでFaye Monitoringのドキュメントを調べると、次のようにバインドしようとしていunsubscribeます:


# Run with: rackup private_pub.ru -s thin -E production
require "bundler/setup"
require "yaml"
require "faye"
require "private_pub"
require "active_support/core_ext"

Faye::WebSocket.load_adapter('thin')

PrivatePub.load_config(File.expand_path("../config/private_pub.yml", __FILE__),     ENV["RAILS_ENV"] || "development")

wts_pubsub = PrivatePub.faye_app

wts_pubsub.bind(:subscribe) do |client_id, channel|
puts "[#{Time.now}] Client #{client_id} joined  #{channel}"
end

wts_pubsub.bind(:unsubscribe) do |client_id, channel|
  puts "[#{Time.now}] Client #{client_id} disconnected from #{channel}"
  PrivatePub.publish_to channel, { marius_says: 'quitter' }
end

run wts_pubsub

しかし、私はタイムアウトを取得し続けます:[ERROR] [Faye::RackAdapter] Timeout::Error

PrivatePub#publish_toRails または private_pub アプリからパブリッシュしているときに期待どおりのデータが保持されますが、private_pub アプリがハングし続けます。

private_pub から公開するにはどうすればよいですか?

4

2 に答える 2

0

何時間もの調査と数多くの試行の後、これが私が見つけた解決策です。

次のように置き換えますPrivatePub.publish_to channel, { marius_says: 'quitter' }

system "curl http://localhost:9292/faye -d 'message={\"channel\":\"#{channel}\", \"data\":{\"channel\":\"#{channel}\",\"data\":{\"message\":{\"content\":\"#{client_id} disconnected from this channel.\"}}}, \"ext\":{\"private_pub_token\":\"ADD_APPROPRIATE_SECRET_HERE\"}}' &"

これにより、問題を回避する非同期リクエスト (curl + &) がトリガーされます。最善の修正ではありませんが、機能します。

于 2013-08-02T14:13:16.490 に答える