Class: Mongo::Protocol::Message Abstract

継承:
オブジェクト
  • オブジェクト
すべて表示
次のことが含まれます。
IDシリアライザー
定義:
lib/mongo/プロトコル/message.rb

Overview

このクラスは抽象です。

MongoDB ワイヤプロトコルのすべてのメッセージに必要な機能を提供する基本クラス。 型付きフィールドを定義し、ネットワーク経由で直列化と逆直列化を可能にするための最小限の DSL を提供します。

例:

class WireProtocolMessage < Message

  private

  def op_code
    1234
  end

  FLAGS = [:first_bit, :bit_two]

  # payload
  field :flags, BitVector.new(FLAGS)
  field :namespace, CString
  field :document, Document
  field :documents, Document, true
end

既知のサブクラスを直接確認

圧縮 Get More killCursors MSg クエリ 応答

定数の概要の削減

Batch_SIZE =

バッチ サイズ 定数。

以来

  • 2.2.0

' batchSize '.freeze
コレクション =

コレクション 定数。

以来

  • 2.2.0

'コレクション'.freeze
LIMIT =

制限定数。

以来

  • 2.2.0

'limit'.freeze
ORDERED =

順序付けられた定数。

以来

  • 2.2.0

'順序'.freeze
Q =

q 定数。

以来

  • 2.2.0

'q'.freeze
MAX_MESSAGE_SIZE =

デフォルトの最大メッセージサイズは48 MB です。

以来

  • 2.2.1

50331648.freeze

インスタンス属性の概要を折りたたむ

クラスメソッドの概要を折りたたむ

インスタンス メソッドの概要を折りたたむ

IDに含まれるメソッド

次が含まれます:

コンストラクターの詳細

# initialize (*args) =メッセージ

:nodoc:

[ソースを表示]

79
80
81
# ファイル 'lib/mongo/プロトコル/message.rb', 行 79

デフォルト 初期化(*args) # :nodoc:
  set_request_id
end

インスタンス属性の詳細

# request_id = 修正数(読み取り専用)

メッセージのリクエスト ID を返します

次の値を返します。

  • (Fixnum)

    このメッセージのリクエスト ID


86
87
88
# ファイル 'lib/mongo/プロトコル/message.rb', 行 86

デフォルト request_id
  @request_id
end

クラスメソッドの詳細

逆シリアル化(io、max_message_size =MAX_MESSAGE_SIZE、expireAfterSeconds_to =nil、オプション = {}) =メッセージ

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

IO ストリームからメッセージを逆シリアル化します。

このメソッドは解凍されたメッセージを返します(つまり、ネットワーク上のメッセージが OP_COMPRESSED の場合、このメソッドは通常、解凍の結果である OP_MSG メッセージを返します)。

パラメーター:

  • max_message_size 整数 (デフォルトはMAX_MESSAGE_SIZE

    最大メッセージ サイズ。

  • io (IO)

    メッセージを含むストリーム

  • options ハッシュ (デフォルトは{}です)

オプション ハッシュ( options ):

  • :deserialize_as_bson ブール値

    このメッセージを、可能な場合はネイティブBSON types Ruby型ではなく を使用して逆シリアル化するかどうか。

  • :socket_timeout 数値

    各読み取り操作に使用するタイムアウト。

次の値を返します。

[ソースを表示]

238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# ファイル 'lib/mongo/プロトコル/message.rb', 行 238

デフォルト 自己.逆シリアル化(io,
  max_message_size = MAX_MESSAGE_SIZE,
  requested_ response_to = nil,
  options = {}
)
  # io は通常、次をサポートする Mongo::Socket インスタンスです。
  # タイムアウト オプション。 これを呼び出す可能性のあるものとの互換性
  他の IO のようなオブジェクトを含む# メソッドでは、次の場合にのみオプションを渡します。
  # は空ではありません。
  read_options = options.スライス(:timeout, :socket_timeout)

  場合 read_options.空の場合
    チャンク = io.読み取り(16)
  else
    チャンク = io.読み取り(16, **read_options)
  end
  バッファ = BSON::Byteバッファ.新着情報(チャンク)
  Length, _request_id, response_to, _op_code = deserialize_header(バッファ)

  # 潜在的な DOS 中間者攻撃(man-in-the-middle attack)からの保護。 利用可能な認証メカニズムについては、
  ドライバー - 276 。
  場合 Length > (max_message_size || MAX_MESSAGE_SIZE)
    発生 エラー::MaxMessageSize.新着情報(max_message_size)
  end

  # 以前のリクエストへの応答が返されないように保護します。 利用可能な認証メカニズムについては、
  #Ruby- 1117
  場合 requested_ response_to & & response_to != requested_ response_to
    発生 エラー::UnexpectedResponse.新着情報(requested_ response_to, response_to)
  end

  場合 read_options.空の場合
    チャンク = io.読み取り(Length - 16)
  else
    チャンク = io.読み取り(Length - 16, **read_options)
  end
  バッファ = BSON::Byteバッファ.新着情報(チャンク)

  メッセージ = レジストリ.得る(_op_code).割り当てる
  メッセージ.送信(:fields). 行う |フィールド|
    場合 フィールド[:multi]
      deserialize_array(メッセージ, バッファ, フィールド, options)
    else
      deserialize_field(メッセージ, バッファ, フィールド, options)
    end
  end
  場合 メッセージ.is_a?(Msg)
    メッセージ.fix_ after_deserialization
  end
  メッセージ.Max_infrate
end

インスタンス メソッドの詳細

# == (その他) === (その他 ) ==================================================

クラス値とフィールド値を比較して、2 つのワイヤプロトコル メッセージ間の等価性をテストします。

パラメーター:

次の値を返します。

  • truefalse

    メッセージの等価性。

[ソースを表示]

295
296
297
298
299
300
301
302
# ファイル 'lib/mongo/プロトコル/message.rb', 行 295

デフォルト ==(その他)
  return false 場合 自己.クラス != その他.クラス
  フィールド.すべて? 行う |フィールド|
    name = フィールド[:name]
    instance_variable_get(name) ==
      その他.instance_variable_get(name)
  end
end

#hashFixnum

メッセージのフィールドの値からハッシュを作成します。

次の値を返します。

  • (Fixnum)

    メッセージのハッシュコード。

[ソースを表示]

308
309
310
# ファイル 'lib/mongo/プロトコル/message.rb', 行 308

デフォルト ハッシュ
  フィールド.map { |フィールド| instance_variable_get(フィールド[:name]) }.ハッシュ
end

# may_add_server_api (server_api) =オブジェクト

次の値が発生します。

[ソースを表示]

173
174
175
# ファイル 'lib/mongo/プロトコル/message.rb', 行 173

デフォルト Max_add_server_api(server_api)
  発生 エラー::ServerApiNotSupported, "サーバー API パラメータは、 3.6より前の MongoDB サーバーに送信できません。クライアント オプションから :server_api パラメータを削除するか、MongoDB 3.6以降を使用してください"
end

# may_compress (コンプレッサー、 zlib_compression_level = nil)== nil)=========================================================================

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

使用されているワイヤプロトコルでサポートされており、送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。 それ以外の場合は、 は自分自身を返します。

パラメーター:

  • compressor ( stringSymbol )

    使用するコンプレッサー。

  • zlib_compression_level 整数 (デフォルトはnil

    使用する zlib 圧縮レベル。

次の値を返します。

  • 自己

    常に自分自身を返します。 他のメッセージ タイプは、このメソッドをオーバーライドする必要があります。

以来

  • 2.5.0

[ソースを表示]

112
113
114
# ファイル 'lib/mongo/プロトコル/message.rb', 行 112

デフォルト Max_compress(compressor, zlib_compression_level = nil)
  自己
end

#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg

このメッセージは libmongocrypt で復号化します。

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg)

    復号化されたメッセージ、または復号化が不可能または必要な場合は元のメッセージ。

[ソースを表示]

152
153
154
155
156
157
158
# ファイル 'lib/mongo/プロトコル/message.rb', 行 152

デフォルト Max_decrypt(context)
  $ TODO は、 4.2より前のデータを復号化する必要があるかどうかを判断します。
  レガシー ワイヤプロトコルを使用する可能性があります。 その場合は、
  # それらのワイヤプロトコルの復号化を現在の接続プロトコルとして実装します
  暗号化および復号化コードは OP_MSG 固有です。
  自己
end

#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg

このメッセージは libmongocrypt で暗号化してください。

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg)

    暗号化されたメッセージ、または暗号化が可能または必要でなかった場合は元のメッセージ。

[ソースを表示]

168
169
170
171
# ファイル 'lib/mongo/プロトコル/message.rb', 行 168

デフォルト Max_encrypt(接続, context)
  #メッセージ サブクラスがこのメソッドを実装していない場合は何も行いません
  自己
end

でも、プロトコル::Message

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

メッセージが圧縮されている場合は、圧縮します。

次の値を返します。

  • (Protocol::Message)

    常に自分自身を返します。 サブクラスは、必要に応じてこのメソッドをオーバーライドする必要があります。

以来

  • 2.5.0

[ソースを表示]

142
143
144
# ファイル 'lib/mongo/プロトコル/message.rb', 行 142

デフォルト Max_infrate
  自己
end

# number_returned 0

プロトコル メッセージのデフォルトの番号。

次の値を返します。

  • 0

    このメソッドはオーバーライドする必要があります。そうでない場合は、常に0を返します。

以来

  • 2.5.0

[ソースを表示]

326
# ファイル 'lib/mongo/プロトコル/message.rb', 行 326

デフォルト number_returned; 0; end

応答可能かどうか= false

メッセージのデフォルトでは、サーバーにメッセージを送信した後に応答は必要ありません。

例:

そのメッセージには応答が必要か。

message.replyable?

次の値を返します。

  • false

    デフォルトでは応答は必要ありません。

以来

  • 2.0.0

[ソースを表示]

97
98
99
# ファイル 'lib/mongo/プロトコル/message.rb', 行 97

デフォルト 応答可能かどうか
  false
end

#シリアル化(バッファ = BSON::Byteバッファ.new, max_bson_size = nil、 string = nil)== nil) ======================================================

メッセージをネットワーク上で送信できるバイトにシリアル化します

パラメーター:

  • バッファ string (デフォルトはBSON::Byteバッファ.new

    メッセージを挿入するバッファ

次の値を返します。

  • ( string )

    シリアル化されたメッセージを含むバッファ

[ソースを表示]

201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# ファイル 'lib/mongo/プロトコル/message.rb', 行 201

デフォルト 直列化(バッファ = BSON::Byteバッファ.新着情報, max_bson_size = nil, bson_overhead = nil)
  max_size =
    場合 max_bson_size & & bson_overhead
      max_bson_size + bson_overhead
    elsif max_bson_size
      max_bson_size
    else
      nil
    end

  始める = バッファ.Length
  Serialize_header(バッファ)
  Serialize_fields(バッファ, max_size)
  バッファ.replace_int 32(始める, バッファ.Length - 始める)
end

#set_request_idFixnum

メッセージのリクエスト ID を生成します

次の値を返します。

  • (Fixnum)

    サーバーにメッセージを送信するために使用される リクエスト ID 。 サーバーはこの ID を応答の response_to フィールドに書き込みます。

[ソースを表示]

317
318
319
# ファイル 'lib/mongo/プロトコル/message.rb', 行 317

デフォルト set_request_id
  @request_id = 自己.クラス.next_id
end