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'
コレクション =

コレクション 定数。

以来

  • 2.2.0

'コレクション'
LIMIT =

制限定数。

以来

  • 2.2.0

'limit'
ORDERED =

順序付けられた定数。

以来

  • 2.2.0

'ordered'
Q =

q 定数。

以来

  • 2.2.0

'q'
MAX_MESSAGE_SIZE =

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

以来

  • 2.2.1

50_331_648

シリアライザーに含まれる定数

シリアライザー::HEADER_PACKシリアライザー::int32_PACKシリアライザー::INT64_PACKシリアライザー::NULLシリアライザー::ゼロ

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

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

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

IDに含まれるメソッド

次が含まれます:

コンストラクターの詳細

#initialize(*_args) ⇒ メッセージ

:nodoc:



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

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

インスタンス属性の詳細

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

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

次の値を返します。

  • (Fixnum)

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



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

デフォルト 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 数値

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

次の値を返します。

次の値が発生します。



235
236
237
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
# ファイル 'lib/mongo/プロトコル/message.rb', 行 235

デフォルト 自己.逆シリアル化(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 。
  発生 エラー::MaxMessageSize.新着情報(max_message_size) 場合 Length > (max_message_size || MAX_MESSAGE_SIZE)

  # 以前のリクエストへの応答が返されないように保護します。 利用可能な認証メカニズムについては、
  #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
  メッセージ.fix_ after_deserialization 場合 メッセージ.is_a?(Msg)
  メッセージ.Max_infrate
end

deserialize_array(メッセージ、io、フィールド、オプション = {}) = メッセージ

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

メッセージ内のフィールドの配列を逆直列化します

配列内の項目数は、クラスで指定された事前に非直列化されたフィールドによって、キーの下のフィールドdsl で記述されている必要があります :multi

パラメーター:

  • メッセージ メッセージ

    逆シリアル化された配列を含むためのメッセージ。

  • io (IO)

    逆シリアル化する配列を含むストリーム。

  • フィールド ハッシュ

    フィールドを表すハッシュ。

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

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

  • :deserialize_as_bson ブール値

    可能な場合は常にBSON typesを使用して、この配列内の各要素を逆直列化するかどうか。

次の値を返します。

  • メッセージ

    逆シリアル化された配列のメッセージ。



382
383
384
385
386
387
# ファイル 'lib/mongo/プロトコル/message.rb', 行 382

デフォルト 自己.deserialize_array(メッセージ, io, フィールド, options = {})
  要素 = []
  count = メッセージ.instance_variable_get(フィールド[:multi])
  count. { 要素 < フィールド[:type].逆シリアル化(io, options) }
  メッセージ.instance_variable_set(フィールド[:name], 要素)
end

deserialize_field(メッセージ、io、フィールド、オプション={}) = メッセージ

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

メッセージ内の単一のフィールドを逆直列化

パラメーター:

  • メッセージ メッセージ

    逆シリアル化されたフィールドを含むためのメッセージです。

  • io (IO)

    逆シリアル化するフィールドを含むストリーム。

  • フィールド ハッシュ

    フィールドを表すハッシュ。

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

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

  • :deserialize_as_bson ブール値

    可能な場合、 BSON types を使用してこのフィールドを逆直列化するかどうか。

次の値を返します。

  • メッセージ

    逆シリアル化されたフィールドを含むメッセージ。



401
402
403
404
405
406
# ファイル 'lib/mongo/プロトコル/message.rb', 行 401

デフォルト 自己.deserialize_field(メッセージ, io, フィールド, options = {})
  メッセージ.instance_variable_set(
    フィールド[:name],
    フィールド[:type].逆シリアル化(io, options)
  )
end

deserialize_header (io) = 配列[Fixnum]<Fixnum>

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

メッセージのヘッダーを逆シリアル化

パラメーター:

  • io (IO)

    ヘッダーを含むストリーム。

次の値を返します。

  • Array <Fixnum>

    逆シリアル化されたヘッダー。



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

デフォルト 自己.deserialize_header(io)
  ヘッダー.逆シリアル化(io)
end

フィールド(名前、型、複数 =false)⇒ nilClass

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

メッセージフィールドを宣言する方法

パラメーター:

  • name ( string )

    フィールドの名前

  • タイプ モジュール

    タイプ固有の直列化戦略

  • multi truefalseシンボル (デフォルトはfalse

    フィールドの値をタイプ :type の配列として、または配列内の項目数を持つフィールドを説明するシンボルとして直列化するには、true と指定します(逆直列化時に使用)

    Note: In fields where multi is a symbol representing the field
    containing number items in the repetition, the field containing
    that information *must* be deserialized prior to deserializing
    fields that use the number.

次の値を返します。

  • nilClass


356
357
358
359
360
361
362
363
364
# ファイル 'lib/mongo/プロトコル/message.rb', 行 356

デフォルト 自己.フィールド(name, タイプ, multi = false)
  フィールド < {
    name: :"@#{name},
    type: タイプ,
    multi: multi
  }

  attr_reader name
end

フィールド = 整数

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

メッセージクラスのフィールドを取得するためのクラスメソッド

次の値を返します。

  • (整数)

    メッセージクラスのフィールド



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

デフォルト 自己.フィールド
  @fields ||= []
end

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

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

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

パラメーター:

次の値を返します。

  • truefalse

    メッセージの等価性。



287
288
289
290
291
292
293
294
295
# ファイル 'lib/mongo/プロトコル/message.rb', 行 287

デフォルト ==(その他)
  return false 場合 自己.クラス != その他.クラス

  フィールド.すべて? 行う |フィールド|
    name = フィールド[:name]
    instance_variable_get(name) ==
      その他.instance_variable_get(name)
  end
end

#hashFixnum

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

次の値を返します。

  • (Fixnum)

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



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

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

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

サーバーAPI オプションをサポートするプロトコル メッセージのサブクラスは、このメソッドをオーバーライドしてサーバーAPIドキュメントをメッセージに追加する必要があります。

パラメーター:

  • server_api ハッシュ

    メッセージに追加するサーバーAPIドキュメント。

次の値が発生します。

  • (NotImplementedError)


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

デフォルト Max_add_server_api(server_api)
  発生 NotImplementedError
end

#Many_compress (_compressor, _zlib_compression_level = nil) = nil)========================================================================

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

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

パラメーター:

  • compressor ( stringSymbol )

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

  • zlib_compression_level (整数)

    使用する zlib 圧縮レベル。

次の値を返します。

  • 自己

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

以来

  • 2.5.0



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

デフォルト Max_compress(_compressor, 圧縮 = nil)
  自己
end

#majority_decrypt (_context) ⇒ Mongo::プロトコル::Msg

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

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg)

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



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

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

#majority_encrypt(_ connection, _context) → Mongo::Protocol::Msg

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

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg)

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



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

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

でも、プロトコル::Message

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

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

次の値を返します。

  • (Protocol::Message)

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

以来

  • 2.5.0



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

デフォルト Max_infrate
  自己
end

# number_returned 0

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

次の値を返します。

  • 0

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

以来

  • 2.5.0



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

デフォルト number_returned
  0
end

応答可能かどうか= false

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

例:

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

message.replyable?

次の値を返します。

  • false

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

以来

  • 2.0.0



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

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

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

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

パラメーター:

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

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

次の値を返します。

  • ( string )

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



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

デフォルト 直列化(バッファ = 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
    end

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

#set_request_idFixnum

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

次の値を返します。

  • (Fixnum)

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



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

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