클래스: Mongo::Server::Connection

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

개요

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

이후:

  • 2.0.0

상수 요약 접기

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

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

핑 명령입니다.

이후:

  • 2.1.0

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

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

OP_MSG에 대한 핑 명령(서버 버전 >= 3.6).

이후:

  • 2.5.0

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

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

핑 메시지.

이후:

  • 2.1.0

protocol::쿼리.신규(Database::ADMIN, Database::명령, ping, :limit => -1)
PING_OP_MSG_MESSAGE =
더 이상 사용되지 않습니다.

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

메시지를 OP_MSG(서버 버전 >= 3.6)로 핑합니다.

이후:

  • 2.5.0

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

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

핑 메시지를 원시 바이트로 표시합니다.

이후:

  • 2.1.0

PING_MESSAGE.직렬화.to_s.동결
PING_OP_MSG_BYTES =
더 이상 사용되지 않습니다.

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

원시 바이트로 핑 OP_MSG 메시지(서버 버전 >= 3.6).

이후:

  • 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, #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

[소스 보기]

106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 106

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
  @pinned = 거짓

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

인스턴스 속성 세부 정보

#global_id정수 (읽기 전용)

모든 연결에서.

반환합니다:

  • (정수)

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

이후:

  • 2.0.0


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

def global_id
  @global_id
end

#ID정수 (읽기 전용)

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

반환합니다:

  • (정수)

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

이후:

  • 2.9.0


136
137
138
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 136

def id
  @id
end

#last_checkin시간 (읽기 전용)

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

반환합니다:

  • (시간)

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

이후:

  • 2.5.0


130
131
132
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 130

def last_checkin
  @last_checkin
end

인스턴스 메서드 세부 정보

#닫았나요?true | false

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

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

반환합니다:

  • (true | false)

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

이후:

  • 2.9.0

[소스 보기]

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

def 닫힘?
  !!@closed
end

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

참고:

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

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

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

예시:

호스트에 연결합니다.

connection.connect!

반환합니다:

  • (true)

    연결에 성공한 경우.

이후:

  • 2.0.0

[소스 보기]

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

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

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

    만약 서버.load_balancer?
      만약 Lint.활성화?
        하지 않는 한 service_id
          올리다 오류::Internal DriverError, "로드 밸런서에 대한 연결이며 여기에 service_id가 설정되어 있어야 하지만,"
        end
      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

[소스 보기]

154
155
156
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 154

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

#connection_pool객체

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

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

이후:

  • 2.0.0

[소스 보기]

146
147
148
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 146

def connection_pool
  옵션[:connection_pool]
end

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

참고:

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

참고:

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

연결을 끊습니다.

매개변수:

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

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

옵션 해시(options):

  • :reason (기호)

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

  • :interrupted (true | false)

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

반환합니다:

  • (true)

    연결 해제에 성공한 경우.

이후:

  • 2.0.0

[소스 보기]

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
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 311

def 연결 해제!(옵션 = nil)
  # 참고: 여기서는 @closed가 참일 수 있지만 소켓이 있을 수도 있습니다.
  # @closed 플래그가 아닌 소켓을 확인합니다.
  @auth_mechanism = nil
  @last_checkin = nil
  만약 소켓
    소켓.닫기 구출 nil
    @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

[소스 보기]

186
187
188
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 186

def 오류?
  !!@error
end

#중단되었습니다!객체

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

이후:

  • 2.0.0

[소스 보기]

181
182
183
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 181

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

#중단되었나요?true | false

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

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

반환합니다:

  • (true | false)

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

이후:

  • 2.0.0

[소스 보기]

176
177
178
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 176

def 중단?
  !!@interrupted
end

#객체

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

연결을 고정됨으로 표시합니다.

이후:

  • 2.0.0

[소스 보기]

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

def 
  @pinned = true
end

#pingtrue, false

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

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

참고:

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

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

예시:

연결을 핑합니다.

connection.ping

반환합니다:

  • (true, false)

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

이후:

  • 2.1.0

[소스 보기]

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

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

#고정되었나요?부울

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

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

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

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

반환합니다:

  • (부울)

이후:

  • 2.0.0

[소스 보기]

198
199
200
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 198

def 고정?
  @pinned
end

#record_checkin!자기

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

예시:

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

connection.record_checkin!

반환합니다:

  • (self)

이후:

  • 2.5.0

[소스 보기]

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

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

#socket_timeoutFloat ~라고도 함: timeout

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

반환합니다:

  • (Float)

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

이후:

  • 2.0.0

[소스 보기]

372
373
374
# 파일 'lib/ Mongo/ 서버/connection.rb', 줄 372

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

#unpinObject

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

연결을 고정되지 않음으로 표시합니다.

이후:

  • 2.0.0

[소스 보기]

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

def 고정 해제
  @pinned = 거짓
end