gpt4 book ai didi

node.js - 如果客户端关闭 session ,nodejs v8.11.3 将在带有 TLS 的 http2 中中止

转载 作者:太空宇宙 更新时间:2023-11-03 22:22:34 25 4
gpt4 key购买 nike

我在使用 Nodejs v8.11.3 时遇到了问题。我使用带有 TLS (https) 的 http2,当客户端关闭 session 时,服务器会中止。这是错误:

HTTP2 31334: Http2Session server: socket closed
HTTP2 31334: Http2Session server: marking session closed
HTTP2 31334: Http2Session server: submitting goaway
node[31334]: ../src/tls_wrap.cc:604:virtual int node::TLSWrap::DoWrite(node::WriteWrap*, uv_buf_t*, size_t, uv_stream_t*): Assertion `(ssl_) != (nullptr)' failed.
1: node::Abort() [node]
2: 0x8c25db [node]
3: node::TLSWrap::DoWrite(node::WriteWrap*, uv_buf_t*, unsigned long, uv_stream_s*) [node]
4: node::http2::Http2Session::SendPendingData() [node]
5: 0x90e769 [node]
6: node::Environment::RunAndClearNativeImmediates() [node]
7: node::Environment::CheckImmediate(uv_check_s*) [node]
8: 0x141a4ac [node]
9: uv_run [node]
10: node::Start(uv_loop_s*, int, char const* const*, int, char const* const*) [node]
11: node::Start(int, char**) [node]
12: __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6]
13: 0x89b1b1 [node]
Aborted (core dumped)

让我困惑的是,尽管套接字已经关闭,为什么服务器仍然发出 GOAWAY 帧?

有人知道一些避免该问题的怪癖吗?

注意:该问题并不总是发生,但可以作为更复杂的测试场景的一部分重现。

奇怪的解决方案

查看答案。

最佳答案

我做了一个怪癖,通过猴子补丁“goaway”来规避这个问题,并引入显式检查套接字是否已关闭。 typescript 代码:

const GOAWAY = Symbol();

interface ExtServerHttp2Session extends http2.ServerHttp2Session {
[GOAWAY]?: (code?: number, lastStreamID?: number, opaqueData?: Buffer | DataView /*| TypedArray*/) => void;
}

function patchedGoaway(
this: ExtServerHttp2Session,
code?: number,
lastStreamID?: number,
opaqueData?: Buffer | DataView /*| TypedArray*/
): void {
if (!this.closed) {
this[GOAWAY]!(code, lastStreamID, opaqueData);
}
}

function monkeyPatch(session: http2.Http2Session) {
const extSession = session as ExtServerHttp2Session;
if (!extSession[GOAWAY]) {
extSession[GOAWAY] = extSession.goaway;
extSession.goaway = patchedGoaway;
}
}

现在,在处理新流时,您可以调用 monkeyPatch(stream.session)

关于node.js - 如果客户端关闭 session ,nodejs v8.11.3 将在带有 TLS 的 http2 中中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com