클래스: Mongo::Server::Mongo::Connection Private

상속:
ConnectionCommon 모두 표시
다음을 포함합니다.
로깅 가능
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이 클래스는 모니터 연결과 그 동작을 모델링합니다.

이후:

  • 2.0.0

직접 알려진 하위 클래스

푸시모니터::연결

상수 요약

Loggable에서 포함된 상수

Loggable::prefix

인스턴스 속성 요약 접기

ConnectionCommon에서 상속된 속성

#compressor, #pid

인스턴스 메서드 요약 접기

Loggable에 포함된 메서드

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

ConnectionCommon에서 상속된 메서드

#connected?, #handShake_command, #handShake_document

생성자 세부 정보

#initialize(address, options = {}) ⇒ Connection

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

모니터링 연결은 인증하지 않습니다.

지정된 옵션을 사용하여 지정된 대상 주소에 대한 새 연결 객체를 만듭니다.

생성자는 I/O를 수행하지 않으므로 소켓이나 핸드셰이크를 생성하지 않습니다. 통화 연결! 메서드를 사용하여 네트워크 연결을 생성합니다.

매개변수:

  • 주소 (Mongo::Address)

    연결의 주소입니다.

  • 옵션 (해시) (기본값: {})

    연결 옵션.

옵션 해시(options):

  • :app_metadata (Mongo::Server::Mongo::AppMetadata)

    핸드셰이크에 사용할 메타데이터입니다. 누락되거나 nil이면 핸드셰이크가 수행되지 않습니다. Mongo::Server::AppMetadata 인스턴스도 작동하지만, 모니터링 연결은 모니터링 소켓이 인증하지 않으므로 서버와의 SCRAM 협상 수행을 생략하기 위해 Mongo::Server::Monitor::AppMetadata 인스턴스를 사용하기 위한 것입니다.

  • :compressors (Array<String>)

    사용할 수 있는 잠재적 압축기 목록을 선호도 순으로 나열한 것입니다. 드라이버는 서버에서도 지원되는 첫 번째 압축기를 선택합니다. 현재 드라이버는 'zstd', 'snappy' 및 'zlib'만 지원합니다.

  • :connect_timeout (Float)

    네트워크 작업에 사용할 제한 시간(초)입니다. 이 시간 제한은 이름에서 알 수 있듯이 연결 호출에만 사용되는 것이 아니라 모든 소켓 작업에 사용됩니다.

이후:

  • 2.0.0



58
59
60
61
62
63
64
65
66
67
68
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 58

def 초기화(주소, 옵션 = {})
  @address = 주소
  @options = 옵션.dup.동결
  하지 않는 한 @app_metadata = 옵션[:app_metadata]
    올리다 ArgumentError, '앱 메타데이터 는 필수 항목입니다. '
  end
  @socket = nil
  @pid = 프로세스.PID
  @compressor = nil
  @hello_ok = 거짓
end

인스턴스 속성 세부 정보

#주소Mongo::Address (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

주소 연결할 주소를 반환합니다.

반환합니다:

이후:

  • 2.0.0



74
75
76
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 74

def 주소
  @address
end

#options해시 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

옵션을 반환합니다.

반환합니다:

  • (해시)

    options 전달된 옵션입니다.

이후:

  • 2.0.0



71
72
73
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 71

def 옵션
  @options
end

#server_connection_id정수 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환값 server_connection_id 서버 연결 ID입니다.

반환합니다:

  • (정수)

    server_connection_id 서버 연결 ID입니다.

이후:

  • 2.0.0



90
91
92
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 90

def server_connection_id
  @server_connection_id
end

인스턴스 메서드 세부 정보

#check_documentBSON::Document

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

연결 확인에 사용할 문서를 작성합니다.

반환합니다:

  • (BSON::Document)

    연결 확인을 위해 서버로 전송해야 하는 문서입니다.

이후:

  • 2.0.0



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 229

def check_document
  server_api = @app_metadata.server_api || 옵션[:server_api]
  doc = 만약 hello_ok? || server_api
    _doc = HELLO_DOC
    만약 server_api
      _doc = _doc.merge(Utils.transformation_server_api(server_api))
    end
    _doc
  other
    LEGACY_HELLO_DOC
  end
  올바른 압축 상태를 유지하려면 # 압축기를 설정해야 합니다.
  서버 설명에 #을 입력합니다. RUBY-2427참조
  만약 압축기 = 옵션[:compressors]
    doc = doc.merge(압축: 압축기)
  end
  doc
end

#연결합니다!true

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이 메서드는 이전에 소켓이 존재하지 않았던 경우 소켓을 설정하여 연결 클래스를 변경합니다.

대상 주소에 대한 네트워크 연결을 설정합니다.

연결이 이미 설정된 경우 이 메서드는 아무 작업도 수행하지 않습니다.

예시:

호스트에 연결합니다.

connection.connect!

반환합니다:

  • (true)

    연결에 성공한 경우.

이후:

  • 2.0.0



158
159
160
161
162
163
164
165
166
167
168
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 158

def 연결!
  만약 @socket
    올리다 ArgumentError, '모니터링 연결이 이미 연결되었습니다. '
  end

  @socket = add_server_diagnostics do
    주소.소켓(socket_timeout, ssl_options.merge(
      connection_address: 주소, 모니터: true))
  end
  true
end

#연결 해제!(options = nil) ⇒ true

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이 메서드는 닫는 데 성공하면 소켓을 nil로 설정하여 연결을 변경합니다.

참고:

이 메서드는 Server::Connections와의 호환성을 위해 옵션 인수를 허용합니다. However, all options are ignored.

연결을 끊습니다.

예시:

호스트와의 연결을 해제합니다.

connection.disconnect!

반환합니다:

  • (true)

    연결 해제에 성공한 경우.

이후:

  • 2.0.0



184
185
186
187
188
189
190
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 184

def 연결 해제!(옵션 = nil)
  만약 소켓
    소켓.닫기 구출 nil
    @socket = nil
  end
  true
end

#dispatch(message) ⇒ Protocol::Message

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

메시지를 보내고 결과를 반환합니다.

매개변수:

반환합니다:

이후:

  • 2.0.0



97
98
99
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 97

def 디스패치(메시지)
  Dispatch_bytes(메시지.직렬화.to_s)
end

#dispatch_bytes(bytes, **opts) ⇒ Protocol::Message

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

사전 직렬화된 메시지를 보내고 결과를 반환합니다.

매개변수:

  • 바이트 (string)

    전송할 직렬화된 메시지입니다.

  • opts (해시)

    사용자 지정 가능한 옵션 세트

옵션 해시(**opts):

  • :read_socket_timeout (숫자)

    각 읽기 작업에 사용할 시간 제한입니다.

반환합니다:

이후:

  • 2.0.0



109
110
111
112
113
114
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 109

def Dispatch_bytes(바이트, **opts)
  write_bytes(바이트)
  read_response(
    socket_timeout: opts[:read_socket_timeout],
  )
end

#악수!BSON::Document

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

연결된 호스트에 핸드셰이크 명령을 보내고 응답의 유효성을 검사합니다.

반환합니다:

  • (BSON::Document)

    서버의 핸드셰이크 응답

다음을 발생시킵니다.

이후:

  • 2.0.0



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 197

def 악수!
  명령 = 핸드셰이크 명령(
    핸드셰이크_문서(
      @app_metadata,
      server_api: 옵션[:server_api]
    )
  )
  Payload = 명령.직렬화.to_s
  메시지 = Dispatch_bytes(Payload)
  결과 = 작업::결과.신규(메시지)
  결과.유효성을 검사합니다!
  회신 = 결과.문서.first
  set_compressor!(회신)
  set_hello_ok!(회신)
  @server_connection_id = 회신['connectionId']
  회신
구출 => exc
  msg = "#{주소}와(과) 핸드셰이크하지 못했습니다."
  Utils.경고_bg_Exception(msg, exc,
    로거: 옵션[:logger],
    log_prefix: 옵션[:log_prefix],
    bg_error_backtrace: 옵션[:bg_error_backtrace],
  )
  올리다
end

#read_response(**opts) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

매개변수:

  • opts (해시)

    사용자 지정 가능한 옵션 세트

옵션 해시(**opts):

  • :socket_timeout (숫자)

    각 읽기 작업에 사용할 시간 제한입니다.

이후:

  • 2.0.0



130
131
132
133
134
135
136
137
138
139
140
141
142
143
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 130

def read_response(**opts)
  하지 않는 한 연결됨?
    올리다 ArgumentError, "연결되지 않은 연결에서 읽기 시도 중 #{self}"
  end

  add_server_connection_id do
    add_server_diagnostics do
      protocol::메시지.역직렬화(소켓,
        protocol::메시지::MAX_MESSAGE_SIZE,
        nil,
        **opts)
    end
  end
end

#socket_timeoutFloat

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

모니터링 소켓 시간 초과를 반환합니다.

모니터링 연결은 연결 시간 초과 값을 소켓 시간 초과 값으로 사용합니다. 자세한 내용은 MongoDB Server 검색 및 모니터링 사양을 참조하세요.

반환합니다:

  • (Float)

    소켓 시간 초과(초)입니다.

이후:

  • 2.4.3



85
86
87
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 85

def socket_timeout
  옵션[:connect_timeout] || 서버::CONNECT_TIMEOUT
end

#write_bytes(bytes) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



116
117
118
119
120
121
122
123
124
125
126
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', 줄 116

def write_bytes(바이트)
  하지 않는 한 연결됨?
    올리다 ArgumentError, "연결되지 않은 연결에서 디스패치 시도 중 #{self}"
  end

  add_server_connection_id do
    add_server_diagnostics do
      소켓.쓰기(바이트)
    end
  end
end