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_header (io) = 配列[Fixnum]<Fixnum>
private
メッセージのヘッダーを逆シリアル化します。
-
。フィールド(名前、型、複数 =false)= nilClass
private
メッセージフィールドを宣言する方法。
-
。フィールド = 整数
private
メッセージクラスのフィールドを取得するためのクラスメソッド。
インスタンス メソッドの概要を折りたたむ
-
# == (その他) = true、false (また: #eql?)
クラス値とフィールド値を比較して、2 つのワイヤプロトコル メッセージ間の等価性をテストします。
-
#deserialize_array(io, フィールド, options = {}) ⇒ 配列
private
メッセージ内のフィールドの配列を逆直列化します。
-
#deserialize_field(io, フィールド, options = {}) = オブジェクト
private
1 つのフィールドをメッセージに逆シリアル化します。
-
#フィールド ⇒ 配列<Hash>
private
メッセージクラスのフィールドを取得するためのメソッド。
-
#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) ====================================
ネットワーク上で送信できるバイトにメッセージを直列化します。
-
#serialize_fields(buffer, max_bson_size = nil) ⇒ String
private
メッセージ フィールドをバッファにシリアライズします。
-
#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 メッセージを返します)。
231 232 233 234 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 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 231 デフォルト 自己.逆シリアル化(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).割り当てる .フィールド.各 行う |フィールド| 場合 フィールド[:multi] .deserialize_array(バッファ, フィールド, ) else .deserialize_field(バッファ, フィールド, ) end end .fix_ after_deserialization 場合 .is_a?(Msg) .Max_infrate end |
。 deserialize_header (io) = 配列[Fixnum]<Fixnum>
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージのヘッダーを逆シリアル化
332 333 334 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 332 デフォルト 自己.deserialize_header(io) ヘッダー.逆シリアル化(io) end |
。フィールド(名前、型、複数 =false)⇒ nilClass
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージフィールドを宣言する方法
352 353 354 355 356 357 358 359 360 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 352 デフォルト 自己.フィールド(name, タイプ, multi = false) フィールド < { name: :"@#{name}。, type: タイプ, multi: multi } attr_reader name end |
。フィールド = 整数
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージクラスのフィールドを取得するためのクラスメソッド
323 324 325 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 323 デフォルト 自己.フィールド @fields ||= [] end |
インスタンス メソッドの詳細
# == (その他) === (その他 ) ==================================================
クラス値とフィールド値を比較して、2 つのワイヤプロトコル メッセージ間の等価性をテストします。
283 284 285 286 287 288 289 290 291 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 283 デフォルト ==(その他) return false 場合 自己.クラス != その他.クラス フィールド.すべて? 行う |フィールド| name = フィールド[:name] instance_variable_get(name) == その他.instance_variable_get(name) end end |
#deserialize_array(io, フィールド, options = {}) ⇒ 配列
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージ内のフィールドの配列を逆直列化します
配列内の項目数は、クラスで指定された事前に非直列化されたフィールドによって、キーの下のフィールドdsl で記述されている必要があります :multi
377 378 379 380 381 382 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 377 デフォルト deserialize_array(io, フィールド, = {}) 要素 = [] count = instance_variable_get(フィールド[:multi]) count.回 { 要素 < フィールド[:type].逆シリアル化(io, ) } instance_variable_set(フィールド[:name], 要素) end |
#deserialize_field(io, フィールド, options = {}) ⇒ オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
1 つのフィールドをメッセージに逆シリアル化します。
395 396 397 398 399 400 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 395 デフォルト deserialize_field(io, フィールド, = {}) instance_variable_set( フィールド[:name], フィールド[:type].逆シリアル化(io, ) ) end |
#フィールド ⇒ 配列<Hash>
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージ クラスのフィールドを取得するメソッド
406 407 408 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 406 デフォルト フィールド 自己.クラス.フィールド end |
#hash ⇒ Fixnum
メッセージのフィールドの値からハッシュを作成します。
297 298 299 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 297 デフォルト ハッシュ フィールド.map { |フィールド| instance_variable_get(フィールド[:name]) }.ハッシュ end |
# may_add_server_api (server_api) =オブジェクト
サーバーAPI オプションをサポートするプロトコル メッセージのサブクラスは、このメソッドをオーバーライドしてサーバーAPIドキュメントをメッセージに追加する必要があります。
171 172 173 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 171 デフォルト 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 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 150 デフォルト Max_decrypt(_context) 自己 end |
#majority_encrypt(_ connection, _context) → Mongo::Protocol::Msg
このメッセージは libmongocrypt で暗号化してください。
162 163 164 165 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 162 デフォルト Max_encrypt(_ connection, _context) #メッセージ サブクラスがこのメソッドを実装していない場合は何も行いません 自己 end |
でも、プロトコル::Message
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージが圧縮されている場合は、圧縮します。
140 141 142 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 140 デフォルト Max_infrate 自己 end |
# number_returned 0
プロトコル メッセージのデフォルトの番号。
315 316 317 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 315 デフォルト 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) ======================================================
メッセージをネットワーク上で送信できるバイトにシリアル化します
196 197 198 199 200 201 202 203 204 205 206 207 208 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 196 デフォルト 直列化(バッファ = 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 |
#serialize_fields(buffer, max_bson_size = nil) ⇒ String
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージ フィールドをバッファにシリアライズします
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 415 デフォルト Serialize_fields(バッファ, max_bson_size = nil) フィールド.各 行う |フィールド| 価値 = instance_variable_get(フィールド[:name]) 場合 フィールド[:multi] 価値.各 行う |item| 場合 フィールド[:type].respond_to?(:size_limit?) フィールド[:type].直列化(バッファ, item, max_bson_size) else フィールド[:type].直列化(バッファ, item) end end elsif フィールド[:type].respond_to?(:size_limit?) フィールド[:type].直列化(バッファ, 価値, max_bson_size) else フィールド[:type].直列化(バッファ, 価値) end end end |
#set_request_id ⇒ Fixnum
メッセージのリクエスト ID を生成します
306 307 308 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 306 デフォルト set_request_id @request_id = 自己.クラス.next_id end |