Включить сжатие на сервере nodejs grpc

Есть ли способ включить сжатие на сервере grpc-nodejs?

Кажется, что это возможно реализовать, так как он может сжать / разархивировать сжатые данные, но не может сжать при отправке ответа обратно.

Я развернул тестовый сервер nodejs и взаимодействовал с ним с помощью клиента Python. Я MITM-редактировал взаимодействие между сервером и клиентом, используя nc чтобы получить количество переданных байтов, и увидеть эффект сжатия.

Когда я отправил 'grpc.default_compression_algorithm' метаданные при выполнении запроса через клиент Python я смог увидеть, что данные, отправленные клиентом, были сжаты, но данные, отправленные обратно сервером, были несжатыми. (sent 815, rcvd 300324 для эхо-службы 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 ответ

Решение

Установка этого работала для меня.

let server = new grpc.Server({
    'grpc.default_compression_level': 2, // (1->Low -- 3->High)
});
Другие вопросы по тегам