aws / aws/aws-lambda-nodejs-runtime-interface-client

Override `highWaterMark` didn't work

未关闭
#94 5 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
TypeScript
星标
224
派生
60
PR 合并指标
30 天内没有已合并 PR

描述

The following code will send the data `BEFORE` 6s:

```js
const util = require('node:util');
const HANDLER_HIGHWATERMARK = Symbol.for(
'aws.lambda.runtime.handler.streaming.highWaterMark',
);

const handler = async (event, responseStream, context) => {
responseStream.setContentType('text/html; charset=utf-8');

responseStream.write("Thinking...");
responseStream.write("a".repeat(64 * 1024));

setTimeout(function() {
responseStream.write("b".repeat(64 * 1024));
}, 3000);

setTimeout(function() {
responseStream.write("After 6s");
responseStream.end();
}, 6000);
};

handler[HANDLER_HIGHWATERMARK] = 512;

exports.handler = awslambda.streamifyResponse(handler, {
highWaterMark: 512
}
);
```

The following code will only send data `AFTER` 6s.

```js
const util = require('node:util');
const HANDLER_HIGHWATERMARK = Symbol.for(
'aws.lambda.runtime.handler.streaming.highWaterMark',
);

const handler = async (event, responseStream, context) => {
responseStream.setContentType('text/html; charset=utf-8');

responseStream.write("Thinking...");
responseStream.write("a".repeat(1 * 1024));

setTimeout(function() {
responseStream.write("b".repeat(1 * 1024));
}, 3000);

setTimeout(function() {
responseStream.write("After 6s");
responseStream.end();
}, 6000);
};

handler[HANDLER_HIGHWATERMARK] = 512;

exports.handler = awslambda.streamifyResponse(handler, {
highWaterMark: 512
}
);
```

From what I tested, the default `highWaterMark` is `64Kb`, but there is no way to override it to be lower, I tried two different ways to do it.

This causes weird issues where I can't send some tiny text and then wait 6s to send more data, it will be sent as a single chunk only after 6s.

This issue was initially discovered at https://github.com/H4ad/serverless-adapter/issues/166

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。