Deno.listen返回的conn套接字对象 如何拿到请求数据

官网的例子
const listener = Deno.listen({ port: 8888 })
for await (const conn of listener) {

}
其中只看到有个方法conn.read(Uint8Array)写入到Uint8Array里,但Uint8Array必须设置大小,太小获取不全 太大请求有问题,怎么解决?

conn.read(Uint8Array) 这里的Uint8Array是指buffer,你需要先指定buffer的大小比如32*1024,然后你要设置一个loop来执行conn.read 直到 EOF,每次read会返回一个数字代表读取了多少个字节到buffer里,如果这个数字小于你buffer的cap,你需要做一次slice:buffer.slice(0,n) 表示当前read的实际结果。然后把buffer拼接起来才是你要的结果。

但实际上很少这样做的,除非你是要自己去处理数据流,一般都会使用module去处理,比如readline,可以分行的读取数据。

1 个赞

按照你的说法,确实可以 我设置了一个递归来循环写入 结果就是一个请求有几率会超时卡死,如果有相关文档或例子,希望给我看看。

for await 里面不要再使用 await