类:Mongo::Server::Monitor::Connection Private
- 继承:
-
ConnectionCommon
- 对象
- ConnectionCommon
- Mongo::Server::Monitor::Connection
- 包括:
- Loggable
- 定义于:
- build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb
Overview
此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。
此类对监视器连接及其行为进行建模。
直接已知子类
常量摘要
Loggable中包含的常量
实例属性摘要折叠
-
#地址⇒ Mongo::Address
只读
private
地址 要连接到的地址。
-
# options ⇒ 哈希
只读
private
选项 传入的选项。
-
# server_connection_id ⇒ 整数
只读
private
Server_connection_id 服务器连接 ID。
从ConnectionCommon继承的属性
实例方法摘要折叠
-
# check_document ⇒ BSON::Document
private
构建用于连接检查的文档。
-
# connect! ⇒ true
private
建立与目标地址的网络连接。
-
#断开连接! (options = nil) ⇒ true
private
断开连接。
-
#dispatch(message) ⇒ Protocol::Message
private
发送消息并返回结果。
-
#dispatch_bytes(bytes, **opts) ⇒ Protocol::Message
private
发送预序列化消息并返回结果。
-
#握手! ⇒ BSON::Document
private
向连接的主机发送握手命令并验证响应。
-
#initialize (address, options = {}) ⇒ 连接
构造函数
private
使用指定选项创建指向指定目标地址的新连接对象。
- # read_response (**opts) ⇒ 对象 private
-
# socket_timeout = "Float"
private
返回监控套接字超时时间。
- # write_bytes (bytes) ⇒ 对象 private
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! 连接对象上的方法来创建网络连接。
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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回要连接到的地址。
74 75 76 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第74行 def 地址 @address end |
# options ⇒哈希(只读)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 options 传入的选项。
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。
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_document ⇒ BSON::Document
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
构建用于连接检查的文档。
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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
如果以前不存在套接字,则此方法会通过设置套接字来更改连接类。
建立与目标地址的网络连接。
如果已建立连接,则此方法不执行任何操作。
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, .合并(merge)( connection_address: 地址, 监控: true)) end true end |
#断开连接! (options = nil) ⇒ true
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
如果关闭成功,此方法会通过将套接字设置为零来改变连接。
此方法接受一个选项参数,以与 Server::Connections 兼容。 但是,所有选项都会被忽略。
断开连接。
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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
发送消息并返回结果。
97 98 99 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor/connection.rb', 第97行 def 调度() dispatch_bytes(.序列化.to_s) end |
#dispatch_bytes(bytes, **opts) ⇒ Protocol::Message
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
发送预序列化消息并返回结果。
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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
向连接的主机发送握手命令并验证响应。
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 = dispatch_bytes(有效负载) 结果 = 操作::结果.new() 结果.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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
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发现和监控规范。
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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
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 |