Class: Mongo::Protocol::Message Abstract
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Protocol::Message
- 定義:
- lib/mongo/プロトコル/message.rb
Overview
MongoDB ワイヤプロトコルのすべてのメッセージに必要な機能を提供する基本クラス。 型付きフィールドを定義し、ネットワーク経由で直列化と逆直列化を可能にするための最小限の DSL を提供します。
定数の概要の削減
- Batch_SIZE =
バッチ サイズ 定数。
'batchSize'- コレクション =
コレクション 定数。
'コレクション'- LIMIT =
制限定数。
'limit'- ORDERED =
順序付けられた定数。
'ordered'- Q =
q 定数。
'q'- MAX_MESSAGE_SIZE =
デフォルトの最大メッセージサイズは48 MB です。
50_331_648
シリアライザーに含まれる定数
シリアライザー::HEADER_PACK、シリアライザー::int32_PACK、シリアライザー::INT64_PACK、シリアライザー::NULL、シリアライザー::ゼロ
インスタンス属性の概要を折りたたむ
-
#request_id ⇒ Fixnum
readOnly
メッセージのリクエスト ID を返します。
クラスメソッドの概要を折りたたむ
-
。逆シリアル化(io、max_message_size =MAX_MESSAGE_SIZE、expireAfterSeconds_to =nil、オプション = {}) = メッセージ
private
IO ストリームからメッセージを逆シリアル化します。
-
。deserialize_array(メッセージ、io、フィールド、オプション = {}) = メッセージ
private
メッセージ内のフィールドの配列を逆直列化します。
-
。deserialize_field(メッセージ、io、フィールド、オプション={}) = メッセージ
private
メッセージ内の 1 つのフィールドを逆シリアル化します。
-
。 deserialize_header (io) = 配列[Fixnum]<Fixnum>
private
メッセージのヘッダーを逆シリアル化します。
-
。フィールド(名前、型、複数 =false)= nilClass
private
メッセージフィールドを宣言する方法。
-
。フィールド = 整数
private
メッセージクラスのフィールドを取得するためのクラスメソッド。
インスタンス メソッドの概要を折りたたむ
-
# == (その他) = true、false (また: #eql?)
クラス値とフィールド値を比較して、2 つのワイヤプロトコル メッセージ間の等価性をテストします。
-
#hash ⇒ Fixnum
メッセージのフィールドの値からハッシュを作成します。
-
#initialize(*_args) = メッセージ
コンストラクター
:nodoc:.
-
# may_add_server_api (server_api) = オブジェクト
サーバーAPI オプションをサポートするプロトコル メッセージのサブクラスは、このメソッドをオーバーライドしてサーバーAPIドキュメントをメッセージに追加する必要があります。
-
#Many_compress(_compressor, _zlib_compression_level = nil) = nil)========================================================================
private
使用されているワイヤプロトコルでサポートされており、送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。
-
#maybe_decrypt(_context) ⇒ Mongo::プロトコル::Msg
このメッセージは libmongocrypt で復号化します。
-
#majority_encrypt (_ connection, _context) → Mongo::プロトコル::Msg
このメッセージは libmongocrypt で暗号化してください。
-
#maybe_inflate ⇒ Protocol::Message
private
メッセージが圧縮されている場合は、圧縮します。
-
# number_returned 0
プロトコル メッセージのデフォルトの番号。
-
応答可能かどうか= false
メッセージのデフォルトでは、サーバーにメッセージを送信した後に応答は必要ありません。
-
#シリアル化(バッファ = BSON::Byteバッファstring 、max_bson_size = nil、bson_overhead = nil) ====================================
ネットワーク上で送信できるバイトにメッセージを直列化します。
-
#set_request_id ⇒ Fixnum
メッセージのリクエスト ID を生成します。
IDに含まれるメソッド
コンストラクターの詳細
#initialize(*_args) ⇒ メッセージ
:nodoc:
77 78 79 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 77 デフォルト 初期化(*_args) # :nodoc: set_request_id end |
インスタンス属性の詳細
# request_id = 修正数(読み取り専用)
メッセージのリクエスト 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 メッセージを返します)。
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, requested_ response_to = nil, = {}) # io は通常、次をサポートする Mongo::Socket インスタンスです。 # タイムアウト オプション。 これを呼び出す可能性のあるものとの互換性 他の IO のようなオブジェクトを含む# メソッドでは、次の場合にのみオプションを渡します。 # は空ではありません。 = .スライス(:timeout, :socket_timeout) チャンク = 場合 .空の場合 io.読み取り(16) else io.読み取り(16, **) end バッファ = BSON::Byteバッファ.新着情報(チャンク) Length, _request_id, response_to, _op_code = deserialize_header(バッファ) # 潜在的な DOS 中間者攻撃(man-in-the-middle attack)からの保護。 利用可能な認証メカニズムについては、 ドライバー - 276 。 発生 エラー::MaxMessageSize.新着情報() 場合 Length > ( || MAX_MESSAGE_SIZE) # 以前のリクエストへの応答が返されないように保護します。 利用可能な認証メカニズムについては、 #Ruby- 1117 場合 requested_ response_to & & response_to != requested_ response_to 発生 エラー::UnexpectedResponse.新着情報(requested_ response_to, response_to) end チャンク = 場合 .空の場合 io.読み取り(Length - 16) else io.読み取り(Length - 16, **) end バッファ = BSON::Byteバッファ.新着情報(チャンク) = レジストリ.得る(_op_code).割り当てる .送信(:fields).各 行う |フィールド| 場合 フィールド[:multi] deserialize_array(, バッファ, フィールド, ) else deserialize_field(, バッファ, フィールド, ) end end .fix_ after_deserialization 場合 .is_a?(Msg) .Max_infrate end |
。deserialize_array(メッセージ、io、フィールド、オプション = {}) = メッセージ
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージ内のフィールドの配列を逆直列化します
配列内の項目数は、クラスで指定された事前に非直列化されたフィールドによって、キーの下のフィールドdsl で記述されている必要があります :multi
382 383 384 385 386 387 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 382 デフォルト 自己.deserialize_array(, io, フィールド, = {}) 要素 = [] count = .instance_variable_get(フィールド[:multi]) count.回 { 要素 < フィールド[:type].逆シリアル化(io, ) } .instance_variable_set(フィールド[:name], 要素) end |
。deserialize_field(メッセージ、io、フィールド、オプション={}) = メッセージ
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージ内の単一のフィールドを逆直列化
401 402 403 404 405 406 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 401 デフォルト 自己.deserialize_field(, io, フィールド, = {}) .instance_variable_set( フィールド[:name], フィールド[:type].逆シリアル化(io, ) ) end |
。 deserialize_header (io) = 配列[Fixnum]<Fixnum>
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージのヘッダーを逆シリアル化
336 337 338 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 336 デフォルト 自己.deserialize_header(io) ヘッダー.逆シリアル化(io) end |
。フィールド(名前、型、複数 =false)⇒ nilClass
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージフィールドを宣言する方法
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 つのワイヤプロトコル メッセージ間の等価性をテストします。
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 |
#hash ⇒ Fixnum
メッセージのフィールドの値からハッシュを作成します。
301 302 303 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 301 デフォルト ハッシュ フィールド.map { |フィールド| instance_variable_get(フィールド[:name]) }.ハッシュ end |
# may_add_server_api (server_api) =オブジェクト
サーバーAPI オプションをサポートするプロトコル メッセージのサブクラスは、このメソッドをオーバーライドしてサーバーAPIドキュメントをメッセージに追加する必要があります。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
使用されているワイヤプロトコルでサポートされており、送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。 それ以外の場合は、 は自分自身を返します。
110 111 112 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 110 デフォルト Max_compress(_compressor, 圧縮 = nil) 自己 end |
#majority_decrypt (_context) ⇒ Mongo::プロトコル::Msg
このメッセージは libmongocrypt で復号化します。
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 で暗号化してください。
166 167 168 169 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 166 デフォルト Max_encrypt(_ connection, _context) #メッセージ サブクラスがこのメソッドを実装していない場合は何も行いません 自己 end |
でも、プロトコル::Message
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージが圧縮されている場合は、圧縮します。
140 141 142 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 140 デフォルト Max_infrate 自己 end |
# number_returned 0
プロトコル メッセージのデフォルトの番号。
319 320 321 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 319 デフォルト number_returned 0 end |
応答可能かどうか= false
メッセージのデフォルトでは、サーバーにメッセージを送信した後に応答は必要ありません。
95 96 97 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 95 デフォルト 応答可能かどうか false end |
#シリアル化(バッファ = BSON::Byteバッファ.new, max_bson_size = nil、 string = nil)== nil) ======================================================
メッセージをネットワーク上で送信できるバイトにシリアル化します
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_id ⇒ Fixnum
メッセージのリクエスト ID を生成します
310 311 312 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 310 デフォルト set_request_id @request_id = 自己.クラス.next_id end |