类:Mongo::Server::Monitor::Connection Private

继承:
ConnectionCommon 显示全部
包括:
Loggable
定义于:
lib/ Mongo/ 服务器/ 监控/connection.rb

Overview

此类是私有 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 = {}) ⇒连接

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

监控连接不会进行身份验证。

使用指定选项创建指向指定目标地址的新连接对象。

构造函数不执行任何 I/O(因此不创建套接字也不握手);调用 connect! 连接对象上的方法来创建网络连接。

参数:

  • 地址 ( Mongo::Address )

    连接的目标地址。

  • 选项 哈希 (默认为: {}

    连接选项。

选项哈希 ( options ):

  • :app_metadata Mongo::Server::Monitor::AppMetadata

    用于握手的元数据。 如果缺失或为零,则不会执行握手。 虽然 Mongo::Server::AppMetadata 实例也可以工作,但监控连接意味着使用 Mongo::Server::Monitor::AppMetadata 实例,以便省略与服务器执行 SCRAM 协商,因为监控套接字不进行身份验证。

  • :compressors ( Array<String> )

    要使用的潜在压缩器列表(按优先顺序排列)。驱动程序会选择服务器也支持的第一个压缩程序。目前,该驱动程序仅支持“zstd”、“snappy”和“zlib”。

  • :connect_timeout 浮点

    用于网络操作的超时时间(以秒为单位)。 此超时用于所有套接字操作,而不仅仅是连接调用,与名称所暗示的相反,

引发:

  • ( ArgumentError )

由于:

  • 2.0.0



56
57
58
59
60
61
62
63
64
65
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 56

def 初始化(地址, 选项 = {})
  @address = 地址
  @options = 选项.dup.冻结
  提高 ArgumentError, ' App 元数据 is required ' 除非 @app_metadata = 选项[:app_metadata]

  @socket = nil
  @pid = 处理.进程 ID (PID)
  @compressor = nil
  @hello_ok = false
end

实例属性详细信息

#地址Mongo::Address (readonly)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回要连接到的地址。

返回:

由于:

  • 2.0.0



71
72
73
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 71

def 地址
  @address
end

# options哈希(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 options 传入的选项。

返回:

  • (哈希)

    options 传入的选项。

由于:

  • 2.0.0



68
69
70
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 68

def 选项
  @options
end

# server_connection_id整数(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 server_connection_id 服务器连接 ID。

返回:

  • ( Integer )

    server_connection_id服务器连接 ID。

由于:

  • 2.0.0



87
88
89
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 87

def server_connection_id
  @server_connection_id
end

实例方法详细信息

# check_documentBSON::Document

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

构建用于连接检查的文档。

返回:

  • ( BSON::Document )

    应发送到服务器以进行连接检查的文档。

由于:

  • 2.0.0



224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 224

def check_document
  server_api = @app_metadata.server_api || 选项[:server_api]
  doc = if hello_ok? || server_api
          _doc = HELLO_DOC
          _doc = _doc.合并(merge)(Utils.transform_server_api(server_api)) if server_api
          _doc
        else
          LEGACY_HELLO_DOC
        end
  # 必须将压缩器设置为保持正确的压缩状态
  # 在服务器描述中。 请参阅 RUBY- 2427
  if compressors = 选项[:compressors]
    doc = doc.合并(merge)(压缩: compressors)
  end
  doc
end

# connect!true

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

如果以前不存在套接字,则此方法会通过设置套接字来更改连接类。

建立与目标地址的网络连接。

如果已建立连接,则此方法不执行任何操作。

例子:

连接到主机。

connection.connect!

返回:

  • ( true )

    如果连接成功。

引发:

  • ( ArgumentError )

由于:

  • 2.0.0



151
152
153
154
155
156
157
158
159
160
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 151

def 连接!
  提高 ArgumentError, '监控连接已连接' if @socket

  @socket = add_server_diagnostics do
    地址.套接字(socket_timeout, ssl_options.合并(merge)(
                                     connection_address: 地址, 监控: true
                                   ))
  end
  true
end

# 断开连接! (_options = nil) ⇒ true

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

如果关闭成功,此方法会通过将套接字设置为零来改变连接。

注意:

此方法接受一个选项参数,以与 Server::Connections 兼容。 但是,所有选项都会被忽略。

断开连接。

例子:

断开与主机的连接。

connection.disconnect!

返回:

  • ( true )

    如果断开连接成功。

由于:

  • 2.0.0



176
177
178
179
180
181
182
183
184
185
186
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 176

def 断开连接!(_options = nil)
  if 套接字
    开始
      套接字.关闭
    救援 StandardError
      nil
    end
    @socket = nil
  end
  true
end

#dispatch(message) ⇒ Protocol::Message

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

发送消息并返回结果。

参数:

返回:

由于:

  • 2.0.0



94
95
96
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 94

def 调度(message)
  dispatch_bytes(message.序列化.to_s)
end

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

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

发送预序列化消息并返回结果。

参数:

  • 字节 ( string )

    要发送的序列化消息。

  • opts (哈希)

    一组可自定义的选项

选项哈希 ( **opts ):

  • :read_socket_timeout 数字

    用于每个读取操作的超时时间。

返回:

由于:

  • 2.0.0



106
107
108
109
110
111
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 106

def dispatch_bytes(字节, **opts)
  write_bytes(字节)
  read_response(
    socket_timeout: opts[:read_socket_timeout]
  )
end

#握手!BSON::Document

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

向连接的主机发送握手命令并验证响应。

返回:

  • ( BSON::Document )

    来自服务器的握手响应

引发:

由于:

  • 2.0.0



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 193

def 握手!
  命令 = handshake_command(
    握手文档(
      @app_metadata,
      server_api: 选项[:server_api]
    )
  )
  有效负载 = 命令.序列化.to_s
  message = dispatch_bytes(有效负载)
  结果 = 操作::结果.new(message)
  结果.validate!
  回复 = 结果.文档.first
  set_compressor!(回复)
  set_hello_ok!(回复)
  @server_connection_id = 回复[' connectionId ']
  回复
救援 StandardError => e
  msg = "无法与#{ Address }握手"
  Utils.warn_bg_Exception(msg, e,
                          记录器: 选项[:logger],
                          log_prefix: 选项[:log_prefix],
                          bg_error_backtrace: 选项[:bg_error_backtrace])
  提高
end

# read_response (**opts) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

参数:

  • opts (哈希)

    一组可自定义的选项

选项哈希 ( **opts ):

  • :socket_timeout 数字

    用于每个读取操作的超时时间。

引发:

  • ( ArgumentError )

由于:

  • 2.0.0



125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 125

def read_response(**opts)
  提高 ArgumentError, "尝试在未连接的连接上读取#{ self } " 除非 已连接?

  add_server_connection_id do
    add_server_diagnostics do
      protocol::message.反序列化(套接字,
                                    protocol::message::MAX_MESSAGE_SIZE,
                                    nil,
                                    **opts)
    end
  end
end

# socket_timeout = " Float "

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回监控套接字超时时间。

请注意,监控连接使用连接超时值作为套接字超时值。 有关详细信息,请参阅MongoDB Server发现和监控规范。

返回:

  • (浮点)

    套接字超时(以秒为单位)。

由于:

  • 2.4.3



82
83
84
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 82

def socket_timeout
  选项[:connect_timeout] || 服务器::CONNECT_TIMEOUT
end

# write_bytes (bytes) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

引发:

  • ( ArgumentError )

由于:

  • 2.0.0



113
114
115
116
117
118
119
120
121
# File 'lib/ Mongo/ 服务器/ 监控/connection.rb', line 113

def write_bytes(字节)
  提高 ArgumentError, "尝试在未连接的连接上进行分派#{ self } " 除非 已连接?

  add_server_connection_id do
    add_server_diagnostics do
      套接字.(字节)
    end
  end
end