Class: Mongo::Protocol::Message Abstract
- 상속:
-
객체
- 객체
- Mongo::Protocol::Message
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/protocol/message.rb
개요
MongoDB 유선 프로토콜 의 모든 메시지에 필요한 기능을 제공하는 기본 클래스입니다. 유형화된 필드를 정의하기 위한 최소한의 DSL을 제공하여 유선을 통한 직렬화 및 역직렬화를 활성화 합니다.
직접 알려진 하위 클래스
상수 요약 접기
- BATCH_SIZE =
배치 크기 상수입니다.
'batchSize'.동결
- COLLECTION =
컬렉션 상수입니다.
'collection'.동결
- LIMIT =
극한 상수입니다.
'limit'.동결
- ORDERED =
순서가 지정된 상수입니다.
'order'.동결
- Q =
q 상수입니다.
'q'.동결
- MAX_MESSAGE_SIZE =
기본 최대 메시지 크기는 48MB입니다.
50331648.동결
인스턴스 속성 요약 접기
-
#request_id ⇒ Fixnum
읽기 전용
메시지의 요청 ID를 반환합니다.
클래스 메서드 요약 접기
-
.역직렬화(io, max_message_size = MAX_MESSAGE_SIZE, expected_response_to = nil, options = {}) ⇒ 메시지
비공개
IO 스트림에서 메시지를 역직렬화합니다.
인스턴스 메서드 요약 접기
-
#==(기타) ⇒ 참, 거짓 (동의어: #eql?)
클래스 값과 필드 값을 비교하여 두 개의 유선 프로토콜 메시지가 동일한지 테스트합니다.
-
#hash ⇒ Fixnum
메시지의 필드 값에서 해시를 생성합니다.
-
#initialize(*args) ⇒ 메시지
생성자
:nodoc:.
- #may_add_server_api(server_api) ⇒ 객체
-
#may_compress(압축기, zlib_compression_level = nil) ⇒ 자체
비공개
사용된 유선 프로토콜에서 지원하는 경우 그리고 전송 중인 명령이 압축을 허용하는 경우 메시지를 압축합니다.
-
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
libmongocrypt로 이 메시지를 해독할 수 있습니다.
-
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg
이 메시지를 libmongocrypt로 암호화할 수 있습니다.
-
#maybe_inflate ⇒ Protocol::Message
비공개
메시지가 압축된 경우 메시지를 확장합니다.
-
#number_returned ⇒ 0
프로토콜 메시지에 대한 기본 숫자 반환 값입니다.
-
#회신 가능? ⇒ false
메시지의 기본값은 서버에 메시지를 보낸 후 회신을 요구하지 않는 것입니다.
-
#직렬화(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ string (동의어: #to_s)
메시지를 유선으로 전송할 수 있는 바이트로 직렬화합니다.
-
#set_request_id ⇒ Fixnum
메시지에 대한 요청 ID를 생성합니다.
ID에 포함된 메서드
생성자 세부 정보
#initialize(*args) ⇒ 메시지
:nodoc:
79 80 81 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 79 def 초기화(*args) # :nodoc: set_request_id end |
인스턴스 속성 세부 정보
#request_id ⇒ Fixnum (읽기 전용)
메시지의 요청 ID를 반환합니다.
86 87 88 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 86 def request_id @request_id end |
클래스 메서드 세부 정보
.역직렬화(io, max_message_size = MAX_MESSAGE_SIZE, expected_response_to = nil, options = {}) ⇒ 메시지
이 메서드는 비공개 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 289 290 291 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 238 def self.역직렬화(io, = MAX_MESSAGE_SIZE, expected_response_to = nil, = {} ) # io 는 일반적으로 다음을 지원하는 Mongo::Socket 인스턴스 입니다. # 시간 초과 옵션. 이를 호출할 수 있는 사람과의 호환성을 위해 # 메서드를 다른 IO와 유사한 객체 와 함께 사용하여 다음과 같은 경우에만 옵션을 전달합니다. # 비어 있지 않습니다. = {} 만약 타임아웃 = [:socket_timeout] [:timeout] = 타임아웃 end 만약 .비어 있나요? 청크 = io.읽기(16) other 청크 = io.읽기(16, **) end buf = BSON::ByteBuffer.신규(청크) 분량, _request_id, response_to, _op_code = deserialize_header(buf) # 잠재적인 DOS 메시지 가로채기 공격으로부터 보호. 참조 # 드라이버-276. 만약 분량 > ( || MAX_MESSAGE_SIZE) 올리다 오류::MaxMessageSize.신규() end # 이전 요청에 대한 응답 반환으로부터 보호합니다. 참조 # RUBY-1117 만약 expected_response_to && response_to != expected_response_to 올리다 오류::예기치 않은 응답.신규(expected_response_to, response_to) end 만약 .비어 있나요? 청크 = io.읽기(분량 - 16) other 청크 = io.읽기(분량 - 16, **) end buf = BSON::ByteBuffer.신규(청크) = 레지스트리.get(_op_code).할당하다 .send(:fields).각 do |필드| 만약 필드[:multi] deserialize_array(, buf, 필드, ) other deserialize_field(, buf, 필드, ) end end 만약 .is_a?(메시지) .fix_after_deserialization end .may_inflate end |
인스턴스 메서드 세부 정보
#==(기타) ⇒ true, false ~ 라고도 함: eql?
클래스 값과 필드 값을 비교하여 두 개의 유선 프로토콜 메시지가 동일한지 테스트합니다.
298 299 300 301 302 303 304 305 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 298 def ==(기타) 반환 거짓 만약 self.클래스 != 기타.클래스 필드.모두? do |필드| 이름 = 필드[:name] instance_variable_get(이름) == 기타.instance_variable_get(이름) end end |
#해시 ⇒ 수정번호
메시지의 필드 값에서 해시를 생성합니다.
311 312 313 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 311 def 해시 필드.map { |필드| instance_variable_get(필드[:name]) }.해시 end |
#may_add_server_api(server_api) ⇒ 객체
173 174 175 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 173 def may_add_server_api(server_api) 올리다 오류::ServerApiNotSupported, "서버 API 매개변수는3.6 이전 MongoDB 서버로 전송할 수 없습니다. 클라이언트 옵션에서 :server_api 매개변수를 제거 하거나 MongoDB 3.6 이상을 사용하세요." end |
#may_compress(압축기, zlib_compression_level = nil) ⇒ 자체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
사용된 유선 프로토콜 에서 지원하는 경우 그리고 전송 중인 명령이 압축을 허용하는 경우 메시지를 압축합니다. 그렇지 않으면 자체를 반환합니다.
112 113 114 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 112 def may_compress(압축기, zlib_compression_level = nil) self end |
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
libmongocrypt로 이 메시지를 해독할 수 있습니다.
152 153 154 155 156 157 158 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 152 def may_decrypt(컨텍스트) # TODO는 이전4.2에서 들어오는 데이터를 해독해야 하는지 여부를 결정합니다. 서버 #개, 잠재적으로 레거시 유선 프로토콜을 사용할 수 있습니다. 그렇다면 다음이 필요합니다. # 해당 유선 프로토콜에 대한 암호 해독을 현재 # 암호화/복호화 코드는 OP_MSG에 따라 다릅니다. self end |
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg
이 메시지를 libmongocrypt로 암호화할 수 있습니다.
168 169 170 171 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 168 def may_encrypt(연결, 컨텍스트) # 메시지 하위 클래스가 이 메서드를 구현하지 않은 경우 아무 작업도 수행하지 않습니다. self end |
#may_inflate ⇒ Protocol::Message
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
메시지가 압축된 경우 메시지를 확장합니다.
142 143 144 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 142 def may_inflate self end |
#number_returned ⇒ 0
프로토콜 메시지에 대한 기본 숫자 반환 값입니다.
329 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 329 def number_returned; 0; end |
#회신 가능? ⇒ false
메시지의 기본값은 서버에 메시지를 보낸 후 회신을 요구하지 않는 것입니다.
97 98 99 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 97 def 회신 가능? 거짓 end |
#직렬화(버퍼 = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ string to_s 라고도 함
메시지를 유선으로 전송할 수 있는 바이트로 직렬화합니다.
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 201 def 직렬화(buffer = BSON::ByteBuffer.신규, 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 other nil end 시작하기 = buffer.분량 serialize_header(buffer) serialize_fields(buffer, max_size) buffer.replace_int32(시작하기, buffer.분량 - 시작하기) end |
#set_request_id ⇒ Fixnum
메시지에 대한 요청 ID를 생성합니다.
320 321 322 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/protocol/message.rb', 줄 320 def set_request_id @request_id = self.클래스.Next_id end |