在 nodejs grpc 服务器中启用压缩

Enable compression in nodejs grpc server

有没有办法在 grpc-nodejs 服务器中启用压缩?

似乎可以实现它,因为它可以deflate/unzip压缩数据,但在发回响应时不能压缩。

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

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

在 nodejs 服务器端设置元数据没有帮助,它仍然发送未压缩的数据。

我认为这应该是可能的原因是因为它能够读取压缩请求。 npm grpc 包也是 grpc 二进制文件的包装器。 运行一个nm grpc_node.node | grep gzipreturns

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

这个设置对我有用。

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