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

继承:
ConnectionCommon 显示全部
包括:
Loggable
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb

Overview

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

此类对监视器连接及其行为进行建模。

由于:

  • 2.0.0

直接已知子类

PushMonitor::Connection

常量摘要

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 浮点

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

由于:

  • 2.0.0



58
59
60
61
62
63
64
65
66
67
68
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第58行

def 初始化(地址, 选项 = {})
  @address = 地址
  @options = 选项.dup.冻结
  除非 @app_metadata = 选项[:app_metadata]
    提高 ArgumentError, ' App 元数据 is required '
  end
  @socket = nil
  @pid = 处理.进程 ID (PID)
  @compressor = nil
  @hello_ok = false
end

实例属性详细信息

#地址Mongo::Address (readonly)

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

返回要连接到的地址。

返回:

由于:

  • 2.0.0



74
75
76
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第74行

def 地址
  @address
end

# options哈希(只读)

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

返回 options 传入的选项。

返回:

  • (哈希)

    options 传入的选项。

由于:

  • 2.0.0



71
72
73
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第71行

def 选项
  @options
end

# server_connection_id整数(只读)

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

返回 server_connection_id 服务器连接 ID。

返回:

  • ( Integer )

    server_connection_id服务器连接 ID。

由于:

  • 2.0.0



90
91
92
# File 'build/Ruby-driver-v 2.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
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第229行

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

# connect!true

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

注意:

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

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

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

例子:

连接到主机。

connection.connect!

返回:

  • ( true )

    如果连接成功。

由于:

  • 2.0.0



158
159
160
161
162
163
164
165
166
167
168
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第158行

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

  @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



184
185
186
187
188
189
190
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第184行

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

#dispatch(message) ⇒ Protocol::Message

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

发送消息并返回结果。

参数:

返回:

由于:

  • 2.0.0



97
98
99
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第97行

def 调度(message)
  dispatch_bytes(message.序列化.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
# File 'build/Ruby-driver-v 2.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
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第197行

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 ']
  回复
救援 => 排除
  msg = "无法与#{ Address }握手"
  Utils.warn_bg_Exception(msg, 排除,
    记录器: 选项[: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
# File 'build/Ruby-driver-v 2.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::message.反序列化(套接字,
        protocol::message::MAX_MESSAGE_SIZE,
        nil,
        **opts)
    end
  end
end

# socket_timeout = " Float "

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

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

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

返回:

  • (浮点)

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

由于:

  • 2.4.3



85
86
87
# File 'build/Ruby-driver-v 2.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
# File 'build/Ruby-driver-v 2.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