클래스: Mongo::Server::Connection

상속:
ConnectionBase 모두 표시
확장자:
전달 가능
다음을 포함합니다.
ID, 모니터링::게시 가능, 재시도 가능
다음에 정의됨:
lib/ Mongo/ 서버/connection.rb

개요

이 클래스는 서버 및 그 동작에 대한 소켓 연결을 모델링합니다.

이후:

  • 2.0.0

상수 요약 접기

PING =
더 이상 사용되지 않습니다.

MongoDB 서버 선택 사양에서는 더 이상 필요하지 않습니다.

핑 명령입니다.

이후:

  • 2.1.0

{ 핑: 1 }.동결
PING_OP_MSG =
더 이상 사용되지 않습니다.

MongoDB 서버 선택 사양에서는 더 이상 필요하지 않습니다.

OP_MSG에 대한 핑 명령

이후:

  • 2.5.0

{ :ping => 1, '$db' => Database::ADMIN }.동결
PING_OP_MSG_MESSAGE =
더 이상 사용되지 않습니다.

MongoDB 서버 선택 사양에서는 더 이상 필요하지 않습니다.

OP_MSG로 메시지 핑

이후:

  • 2.5.0

protocol::메시지.신규([], {}, PING_OP_MSG)
PING_OP_MSG_BYTES =
더 이상 사용되지 않습니다.

MongoDB 서버 선택 사양에서는 더 이상 필요하지 않습니다.

원시 바이트로 핑 OP_MSG 메시지

이후:

  • 2.5.0

PING_OP_MSG_MESSAGE.직렬화.to_s.동결

Loggable에서 포함된 상수

Loggable::prefix

ConnectionBase에서 상속된 상수

Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, Mongo::Server::ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, Mongo::Server::ConnectionBase::REDUCED_MAX_BSON_SIZE

인스턴스 속성 요약 접기

모니터링::게시 가능에 포함된 속성

#monitoring

ConnectionBase에서 상속된 속성

#description, #options, #server

ConnectionCommon에서 상속된 속성

#compressor, #pid

인스턴스 메서드 요약 접기

ID에 포함된 메서드

포함

Retryable에 포함된 메서드

#read_Worker, #select_server, #with_overload_retry, #write_Worker

Monitoring::Publishable에 포함된 메서드

#publish_cmap_event, #publish_event, #publish_s담_event

Loggable에 포함된 메서드

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

ConnectionBase에서 상속된 메서드

#app_metadata, #dispatch, #generation, #service_id

ConnectionCommon에서 상속된 메서드

#handShake_command, #handShake_document

생성자 세부 정보

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

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

참고:

연결은 MongoDB Server 외부에서 직접 인스턴스화되어서는 안 됩니다.

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

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

예시:

연결을 생성합니다.

Connection.new(server)

매개변수:

  • 서버 (Mongo::Server)

    연결 대상 서버입니다.

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

    연결 옵션.

옵션 해시(options):

  • :pipe (IO)

    소켓에서 읽을 때 선택 시스템 호출 중에 수신할 파이프의 읽기 쪽 파일 설명자입니다.

  • :generation (정수)

    이 연결의 생성입니다. 생성은 로드 밸런싱 모드가 아닌 경우에만 이 옵션에서 지정해야 하며, 연결이 생성될 때 연결 풀의 생성이어야 합니다. 로드 밸런싱 모드에서는 핸드셰이크가 완료된 후 연결에 생성이 설정됩니다.

  • :server_api (해시)

    요청된 서버 API 버전입니다. 이 해시에는 다음 항목이 포함될 수 있습니다.

    • :version -- string
    • :strict -- 불리언
    • :deprecation_errors -- 불리언

이후:

  • 2.0.0



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 90

def 초기화(서버, 옵션 = {})
  만약 서버.load_balancer? && 옵션[:generation]
    올리다 ArgumentError, '서버 가 로드 밸런서 인 경우 생성을 설정하다 수 없습니다. '
  end

  @id = 서버.Next_connection_id
  @global_id = self.클래스.Next_id
  @monitoring = 서버.모니터링
  @options = 옵션.동결
  @server = 서버
  @socket = nil
  @last_checkin = nil
  @auth_mechanism = nil
  @pid = 프로세스.PID
  @pin_reasons = 세트.신규

  publish_cmap_event(
    모니터링::이벤트::Cmap::connectionCreated 이벤트.신규(주소, id)
  )
end

인스턴스 속성 세부 정보

#global_id정수 (읽기 전용)

모든 연결에서.

반환합니다:

  • (정수)

    연결의 글로벌 ID입니다. 이는 고유합니다.

이후:

  • 2.0.0



124
125
126
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 124

def global_id
  @global_id
end

#ID정수 (읽기 전용)

동일한 서버 객체에 대한 연결을 통해 전달됩니다.

반환합니다:

  • (정수)

    연결의 ID입니다. 이는 고유합니다.

이후:

  • 2.9.0



120
121
122
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 120

def id
  @id
end

#last_checkin시간 (읽기 전용)

연결이 풀에 마지막으로 체크인된 시간을 반환합니다.

반환합니다:

  • (시간)

    마지막으로 연결이 풀에 다시 체크인된 시간입니다.

이후:

  • 2.5.0



114
115
116
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 114

def last_checkin
  @last_checkin
end

인스턴스 메서드 세부 정보

#닫았나요?true | false

연결이 닫혔는지 여부입니다.

닫힌 연결은 더 이상 사용하지 않아야 합니다. 대신 연결 풀에서 새 연결을 얻습니다.

반환합니다:

  • (true | false)

    연결이 닫혔는지 여부입니다.

이후:

  • 2.9.0



152
153
154
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 152

def 닫힘?
  !!@closed
end

#연결합니다!(context = nil) ⇒ true

참고:

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

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

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

예시:

호스트에 연결합니다.

connection.connect!

반환합니다:

  • (true)

    연결에 성공한 경우.

이후:

  • 2.0.0



228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 228

def 연결!(컨텍스트 = nil)
  raise_if_closed!

  하지 않는 한 @socket
    @socket = create_socket(컨텍스트)
    @description, @compressor = do_connect

    만약 서버.load_balancer?
      만약 Lint.활성화? && !service_id
        올리다 오류::Internal DriverError,
              '로드 밸런서 에 대한 연결이며 여기에 service_id가 설정하다 있어야 하지만 '
      end
      @generation = connection_pool.generate_manager.생성(service_id: service_id)
    end

    publish_cmap_event(
      모니터링::이벤트::Cmap::connectionReady.신규(주소, id)
    )

    @close_event_published = 거짓
  end
  true
end

#연결되었나요?true | false

연결이 연결되었으며 중단되거나 닫히지 않았거나 오류가 발생하지 않았는지 여부입니다.

반환합니다:

  • (true | false)

    연결이 연결된 경우.

이후:

  • 2.0.0



140
141
142
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 140

def 연결됨?
  !닫힘? && !오류? && !중단? && !!@socket
end

#connection_pool객체

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

이 연결이 생성된 연결 풀입니다. nil일 수 있습니다.

이후:

  • 2.0.0



132
133
134
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 132

def connection_pool
  옵션[:connection_pool]
end

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

참고:

연결이 끊어지면 더 이상 사용해서는 안 됩니다. 연결 풀에서 새 연결을 가져와야 준비된 연결을 반환하거나 새 연결을 생성합니다. Linting이 활성화된 경우 연결이 끊긴 연결을 재사용하면 Error::LintError가 발생합니다. Linting이 활성화되지 않은 경우 경고가 기록됩니다.

참고:

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

연결을 끊습니다.

매개변수:

  • 옵션 (해시) (기본값: nil)

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

옵션 해시(options):

  • :reason (기호)

    연결이 닫히는 이유입니다.

  • :interrupted (true | false)

    연결이 중단되었는지 여부입니다.

반환합니다:

  • (true)

    연결 해제에 성공한 경우.

이후:

  • 2.0.0



310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 310

def 연결 해제!(옵션 = nil)
  # 참고: 여기서는 @closed가 참일 수 있지만 소켓이 있을 수도 있습니다.
  # @closed 플래그가 아닌 소켓을 확인합니다.
  @auth_mechanism = nil
  @last_checkin = nil
  만약 소켓
    시작
      소켓.닫기
    구출 StandardError
      nil
    end
    @socket = nil
  end
  @closed = true
  중단되었습니다! 만약 옵션 && 옵션[:interrupted]

  # CMAP 사양 테스트를 충족하려면 다음과 같은 경우에도 닫기 이벤트를 게시합니다.
  # 소켓이 연결되지 않았으므로 준비 이벤트가 연결되지 않았습니다.
  # 게시됨). 그러나 닫기 이벤트를 게시했는지 여부를 추적하고
  # 소켓이 다시 연결되지 않는 한 여러 번 게시합니다.
  # 이 경우 소켓 닫기당 한 번씩 닫기 이벤트를 게시합니다.
  하지 않는 한 @close_event_published
    이유 = 옵션 && 옵션[:reason]
    publish_cmap_event(
      모니터링::이벤트::Cmap::연결종료.신규(
        주소,
        id,
        이유
      )
    )
    @close_event_published = true
  end

  true
end

#오류?부울

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

반환합니다:

  • (부울)

이후:

  • 2.0.0



172
173
174
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 172

def 오류?
  !!@error
end

#중단되었습니다!객체

연결을 중단됨으로 표시합니다.

이후:

  • 2.0.0



167
168
169
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 167

def 중단되었습니다!
  @interrupted = true
end

#중단되었나요?true | false

연결이 중단되었는지 여부입니다.

중단된 연결은 이미 풀에서 제거되었으므로 풀에 다시 체크인해서는 안 됩니다.

반환합니다:

  • (true | false)

    연결이 중단되었는지 여부입니다.

이후:

  • 2.0.0



162
163
164
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 162

def 중단?
  !!@interrupted
end

#pin(reason =: 커서) ⇒ 객체

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

주어진 이유로 연결을 고정됨으로 표시합니다.

매개변수:

  • 이유 (기호) (기본값: :커서)

    고정 이유(: 커서 또는 : 트랜잭션). 기본값은 입니다: 이전 버전과의 호환성을 위한 커서 .

이후:

  • 2.0.0



194
195
196
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 194

def (이유 = :cursor)
  @pin_reasons << 이유
end

#pingtrue, false

더 이상 사용되지 않습니다.

MongoDB 서버 선택 사양에서는 더 이상 필요하지 않습니다.

참고:

이는 최적화를 위해 사전 직렬화된 핑 메시지를 사용합니다.

연결을 핑(ping)하여 서버가 명령에 응답하는지 확인합니다. 이는 서버 측에서 비차단입니다.

예시:

연결을 핑합니다.

connection.ping

반환합니다:

  • (true, false)

    서버가 연결을 허용하는 경우.

이후:

  • 2.1.0



359
360
361
362
363
364
365
366
367
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 359

def ping
  sure_connected do |소켓|
    회신 = add_server_diagnostics do
      소켓.쓰기(PING_OP_MSG_BYTES)
      protocol::메시지.역직렬화(소켓, max_message_size)
    end
    회신.문서[0][작업::결과::확인] == 1
  end
end

#고정되었나요?부울

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

연결이 트랜잭션 또는 커서 작업에서 사용되는지 여부입니다.

고정된 연결은 유휴 상태이거나 오래된 경우 연결을 끊거나 연결 풀에서 제거해서는 안 됩니다.

@return [ true | false ] 연결 고정 여부입니다.

반환합니다:

  • (부울)

이후:

  • 2.0.0



184
185
186
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 184

def 고정?
  !@pin_reasons.비어 있나요?
end

#record_checkin!자기

마지막 체크인 시간을 기록합니다.

예시:

이 연결의 체크인 시간을 기록합니다.

connection.record_checkin!

반환합니다:

  • (self)

이후:

  • 2.5.0



388
389
390
391
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 388

def record_checkin!
  @last_checkin = 시간.지금
  self
end

#socket_timeoutFloat ~라고도 함: timeout

소켓에서 작업을 실행하는 데 걸리는 시간 제한을 가져옵니다.

반환합니다:

  • (Float)

    작업 시간 제한(초)입니다.

이후:

  • 2.0.0



374
375
376
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 374

def socket_timeout
  @timeout ||= 옵션[:socket_timeout]
end

#transportSymbol | nil

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

이 연결의 전송 유형을 가져옵니다.

반환합니다:

  • (Symbol | nil)

    전송 유형은 :tcp 또는 :unix이고, 소켓이 없는 경우 nil입니다.

이후:

  • 2.0.0



398
399
400
401
402
403
404
405
406
407
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 398

def 운송
  반환 nil 만약 @socket.nil?

  case @socket
  when mongo::소켓::Unix
    :unix
  other
    :tcp
  end
end

#unpin(reason =: 커서) ⇒ 객체

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

주어진 이유로 연결에서 핀을 제거합니다.

매개변수:

  • 이유 (기호) (기본값: :커서)

    고정을 해제해야 하는 이유(: 커서 또는 : 트랜잭션). 기본값은 입니다: 이전 버전과의 호환성을 위한 커서 .

이후:

  • 2.0.0



204
205
206
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 204

def 고정 해제(이유 = :cursor)
  @pin_reasons.삭제(이유)
end

#unpin_all객체

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

연결에서 모든 핀을 제거합니다.

이후:

  • 2.0.0



211
212
213
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 211

def unpin_all
  @pin_reasons.지우기
end