在nodejs grpc服务器中启用压缩

时间:2018-07-23 14:28:12

标签: node.js protocol-buffers grpc grpc-node

是否可以在grpc-nodejs服务器中启用压缩?

似乎可以实现它,因为它可以压缩/解压缩压缩的数据,但是在将响应发送回时无法压缩。

我启动了测试nodejs服务器,并使用python客户端与之交互。我使用nc对服务器和客户端之间的交互进行了MITM编辑,以获取传输的字节数,并查看压缩的效果。

当我通过python客户端发出请求时发送了'grpc.default_compression_algorithm'元数据时,我能够看到客户端发送的数据已压缩,但服务器发送回的数据却未压缩。 (sent 815, rcvd 300324用于echo grpc服务。

在nodejs服务器端设置元数据无济于事,它仍然会发送未压缩的数据。

之所以我认为应该可行,是因为它能够读取压缩的请求。 npm grpc软件包也是grpc二进制文件的包装。运行nm grpc_node.node | grep gzip返回

0000000000306800 d grpc_stream_compression_gzip_vtable
00000000000b2fd0 t _ZL10gzip_flateP36grpc_stream_compression_context_gzipP17grpc_slice_bufferS2_PmmiPb
00000000000b3670 t _ZL25grpc_stream_compress_gzipP31grpc_stream_compression_contextP17grpc_slice_bufferS2_Pmm29grpc_stream_compression_flush
00000000000b3600 t _ZL27grpc_stream_decompress_gzipP31grpc_stream_compression_contextP17grpc_slice_bufferS2_PmmPb
00000000000b2ed0 t _ZL43grpc_stream_compression_context_create_gzip30grpc_stream_compression_method
00000000000b2e70 t _ZL44grpc_stream_compression_context_destroy_gzipP31grpc_stream_compression_context

1 个答案:

答案 0 :(得分:0)

设置此项对我有用。

let server = new grpc.Server({
    'grpc.default_compression_level': 2, // (1->Low -- 3->High)
});