0

faye (ディストリビューションに含まれているチャットの例) を使用して、概念実証のチャット アプリケーションを作成しようとしています。

私の概念実証では、クライアントがチャンネルに登録したときに、チャット チャンネルの完全な履歴を送信したいと考えています。私の現在のアイデアは、サブスクリプション応答メッセージのカスタム フィールドを使用してこれを実装することでした。

bayeux プロトコル定義を確認したところ、サブスクリプション応答メッセージで「ext」フィールドが許可されているようです。

しかし、サーバー エクステンションを使用して、この ext フィールドに何も追加できませんでした。

class ServerLog
  def incoming(message, callback)
    puts " msg: #{message}"
    unless message['channel'] == '/meta/subscribe'
      return callback.call(message)
    end

    # the following line changes absolutely nothing
    message['ext'] = 'foo'

    callback.call(message)
  end
end

App.add_extension(ServerLog.new)

ext フィールドの設定によってサーバーがクラッシュすることはありませんが、サブスクリプションの応答メッセージにはまったく影響しません。Wireshark を使用して確認したこともあります (js クライアントが一部のフィールドを無視しないようにするためです)。

4

1 に答える 1

0

私の間違いは、「発信」ではなく「着信」メソッドを使用していたことです。

class ServerLog
  def outgoing(message, callback)
    puts " out: #{message}#"
    unless message['channel'] == '/meta/subscribe'
      return callback.call(message)
    end

    if message['subscription'] == '/chat/specialchannel'
      message['ext'] ||= {}
      message['ext']['specialattribute'] = 'special value'
    end

    callback.call(message)

  end
end

App.add_extension(ServerLog.new)

この例では、購読応答メッセージspecialattributeのフィールドにを追加します (チャンネルが の場合)。ext/chat/specialchannel

于 2014-07-22T15:58:11.170 に答える