Class: Mongo::Protocol::Compressed

继承:
message
  • 对象
显示全部
定义于:
lib/ Mongo/ 协议/compressed.rb

Overview

MongoDB Wire 协议压缩消息。

这是压缩另一个操作码的双向消息。请参阅 https://github.com/mongodb/specifications/blob/master/source/compression/OP_COMPRESSED.md

由于:

  • 2.5.0

常量摘要折叠

noop =

noop 压缩器标识符。

由于:

  • 2.5.0

'noop'
NOOP_BYTE =

该字节表示消息未经压缩(测试模式)。

由于:

  • 2.5.0

0.chr.force_encoding(BSON::二进制文件).冻结
SNAPPY =

snappy 压缩器标识符。

由于:

  • 2.5.0

'snappy'
SNAPPY_BYTE =

该字节表示消息已使用snappy压缩。

由于:

  • 2.5.0

1.chr.force_encoding(BSON::二进制文件).冻结
ZLIB_BYTE =

该字节表示消息已使用zlib压缩。

由于:

  • 2.5.0

2.chr.force_encoding(BSON::二进制文件).冻结
zlib =

zlib压缩程序标识符。

由于:

  • 2.5.0

'zlib'
zstd =

zstd 压缩器标识符。

由于:

  • 2.5.0

'zstd'
ZSTD_BYTE =

该字节表示消息已使用 zstd 压缩。

由于:

  • 2.5.0

3.chr.force_encoding(BSON::二进制文件).冻结
COMPRESSOR_ID_MAP =

字节映射的压缩程序标识符。

由于:

  • 2.5.0

{
  snappy => SNAPPY_BYTE,
  zstd => ZSTD_BYTE,
  zlib => ZLIB_BYTE
}.冻结

Message继承的常量

Message::BATCH_SIZEMessage::COLLECTIONMessage::LIMITMessage::MAX_MESSAGE_SIZEMessage::ORDEREDMessage::Q

序列化器中包含的常量

Serializers::HEADER_PACKSerializers::INT32_PACKSerializers::INT64_PACKSerializers::NULLSerializers::ZERO

实例属性摘要

Message继承的属性

#request_id

实例方法摘要折叠

Message继承的方法

#==, deserialize, #deserialize_array, #deserialize_field, deserialize_header, 字段, 字段, 字段, 哈希, #maybe_add_server_api, #maybe_compress, #maybe_decrypt, #maybe_encrypt, #number_returned, #serialize, #set_request_id

ID中包含的方法

包含

构造函数详情

#initialize (message,Compressor,zlib_compression_level = nil) ⇒ 已压缩

创建新的 OP_COMPRESSED 消息。

例子:

创建 OP_COMPRESSED 消息。

Compressed.new(original_message, 'zlib')

参数:

  • message (Mongo::Protocol::Message)

    原始消息。

  • 压缩器 ( string , Symbol )

    要使用的压缩算法。

  • zlib_compression_level 整数 (默认为: nil

    要使用的 zlib 压缩级别。 - 1和 nil 表示默认值。

由于:

  • 2.5.0



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/ Mongo/ 协议/compressed.rb', line 76

def 初始化(message, 压缩器, zlib_compression_level = nil)
  ()
  @original_message = message
  @original_op_code = message.op_code
  @uncompressed_size = 0
  @compressor_id = COMPRESSOR_ID_MAP[压缩器]
  @compressed_message = ' '
  @zlib_compression_level = zlib_compression_level if zlib_compression_level && zlib_compression_level != -1
  # 压缩消息必须重用包装消息的请求 ID,
  # 覆盖由超类初始化程序分配的新 ID。
  @request_id = message.request_id
end

实例方法详细信息

#也许_inflateProtocol::Message

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

膨胀 OP_COMRESSED 消息并返回原始消息。

返回:

由于:

  • 2.5.0



95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/ Mongo/ 协议/compressed.rb', line 95

def 也许_inflate
  message = 注册表.获取(@original_op_code).分配
  buf = 解压缩(@compressed_message)

  message.字段. do |字段|
    if 字段[:multi]
      message.deserialize_array(buf, 字段)
    else
      message.deserialize_field(buf, 字段)
    end
  end
  message.fix_after_deserialization if message.is_a?(消息)
  message
end

#可回复?true , false

该消息是否期望从数据库得到回复。

例子:

该消息是否需要回复?

message.replyable?

返回:

  • ( true , false )

    如果消息需要回复。

由于:

  • 2.5.0



118
119
120
# File 'lib/ Mongo/ 协议/compressed.rb', line 118

def 可回复?
  @original_message.可回复?
end

#serialize_fields(buffer, max_bson_size) ⇒ 对象

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

由于:

  • 2.5.0



123
124
125
126
127
128
129
# File 'lib/ Mongo/ 协议/compressed.rb', line 123

def Serialize_fields(缓冲, max_bson_size)
  buf = BSON::ByteBuffer.new
  @original_message.Serialize_fields(buf, max_bson_size)
  @uncompressed_size = buf.长度
  @compressed_message = compress(buf)
  
end