Class: Mongo::Protocol::Message Abstract
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Protocol::Message
- 定義:
- lib/mongo/プロトコル/message.rb
Overview
MongoDB ワイヤプロトコルのすべてのメッセージに必要な機能を提供する基本クラス。 型付きフィールドを定義し、ネットワーク経由で直列化と逆直列化を可能にするための最小限の DSL を提供します。
定数の概要の削減
- Batch_SIZE =
バッチ サイズ 定数。
' batchSize '.freeze
- コレクション =
コレクション 定数。
'コレクション'.freeze
- LIMIT =
制限定数。
'limit'.freeze
- ORDERED =
順序付けられた定数。
'順序'.freeze
- Q =
q 定数。
'q'.freeze
- MAX_MESSAGE_SIZE =
デフォルトの最大メッセージサイズは48 MB です。
50331648.freeze
インスタンス属性の概要を折りたたむ
-
#request_id ⇒ Fixnum
readOnly
メッセージのリクエスト ID を返します。
クラスメソッドの概要を折りたたむ
-
。逆シリアル化(io、max_message_size =MAX_MESSAGE_SIZE、expireAfterSeconds_to =nil、オプション = {}) = メッセージ
private
IO ストリームからメッセージを逆シリアル化します。
インスタンス メソッドの概要を折りたたむ
-
# == (その他) = true、false (また: #eql?)
クラス値とフィールド値を比較して、2 つのワイヤプロトコル メッセージ間の等価性をテストします。
-
#hash ⇒ Fixnum
メッセージのフィールドの値からハッシュを作成します。
-
# initialize (*args) = メッセージ
コンストラクター
:nodoc:.
- # may_add_server_api (server_api) = オブジェクト
-
# may_compress (コンプレッサー、zlib_compression_level = nil)== nil)=========================================================================
private
使用されているワイヤプロトコルでサポートされており、送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。
-
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
このメッセージは libmongocrypt で復号化します。
-
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::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に含まれるメソッド
コンストラクターの詳細
インスタンス属性の詳細
# request_id = 修正数(読み取り専用)
メッセージのリクエスト 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 メッセージを返します)。
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, 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 。 場合 Length > ( || MAX_MESSAGE_SIZE) 発生 エラー::MaxMessageSize.新着情報() end # 以前のリクエストへの応答が返されないように保護します。 利用可能な認証メカニズムについては、 #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 場合 .is_a?(Msg) .fix_ after_deserialization end .Max_infrate end |
インスタンス メソッドの詳細
# == (その他) === (その他 ) ==================================================
クラス値とフィールド値を比較して、2 つのワイヤプロトコル メッセージ間の等価性をテストします。
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 |
#hash ⇒ 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
使用されているワイヤプロトコルでサポートされており、送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。 それ以外の場合は、 は自分自身を返します。
112 113 114 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 112 デフォルト Max_compress(compressor, zlib_compression_level = nil) 自己 end |
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
このメッセージは libmongocrypt で復号化します。
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 で暗号化してください。
168 169 170 171 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 168 デフォルト Max_encrypt(接続, context) #メッセージ サブクラスがこのメソッドを実装していない場合は何も行いません 自己 end |
でも、プロトコル::Message
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージが圧縮されている場合は、圧縮します。
142 143 144 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 142 デフォルト Max_infrate 自己 end |
# number_returned 0
プロトコル メッセージのデフォルトの番号。
326 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 326 デフォルト number_returned; 0; end |
応答可能かどうか= false
メッセージのデフォルトでは、サーバーにメッセージを送信した後に応答は必要ありません。
97 98 99 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 97 デフォルト 応答可能かどうか false end |
#シリアル化(バッファ = BSON::Byteバッファ.new, max_bson_size = nil、 string = nil)== nil) ======================================================
メッセージをネットワーク上で送信できるバイトにシリアル化します
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_id ⇒ Fixnum
メッセージのリクエスト ID を生成します
317 318 319 |
# ファイル 'lib/mongo/プロトコル/message.rb', 行 317 デフォルト set_request_id @request_id = 自己.クラス.next_id end |