- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正试图在 Deno 1.9 release notes 上找到更多信息, 关于原生的API HTTP/2服务器。我的目标是将服务器发送的事件 ( SSE ) 与 HTTP/2 服务器一起使用。发行说明中提供了以下代码:
const body = new TextEncoder().encode("Hello World");
for await (const conn of Deno.listen({ port: 4500 })) {
(async () => {
for await (const { respondWith } of Deno.serveHttp(conn)) {
respondWith(new Response(body));
}
})();
}
我希望能够处理请求、发送 header 等。因此,如果有人可以向我指出 API,那就太好了。
最佳答案
围绕 Deno.serveHttp 的 API 实际上非常基础,类似于 MDN 上记录的 ServiceWorker 获取事件 API。
当我写这个答案时,Deno 的原生 HTTP 服务器仍然被标记为“不稳定”。 API 从那时起就稳定了,所以现在可以在此处查看文档:https://doc.deno.land/deno/stable/~/Deno.RequestEvent
总结是给你一个 Request object并负责构建/响应 Response object .响应构造函数上的 MDN 页面在显示响应请求时的选项方面应该非常有用。
此示例显示了一个带有正文、状态代码和一个额外 header 的响应:
await evt.respondWith(new Response(someHtml, {
status: 200,
headers: new Headers({ "Content-Type": "text/html" }),
}));
关于 SSE:目前 Deno 中没有内置服务器发送事件功能,因此就 Deno API 而言,SSE 流看起来像任何其他流响应。
生成 SSE 事件的最简单方法是使用像 Oak 这样的 HTTP 库,它有 native support for emitting events到 HTTP 响应。
如果您想更多地自己动手做,第一步是编写一个异步生成器函数来生成 SSE 有效负载流,例如此实现可生成 op_http_write
操作的累积指标每秒:
// Function generating the SSE-formatted data stream
async function* generateEvents() {
while (true) {
await new Promise((r) => setTimeout(r, 1000));
const opMetrics = Deno.metrics().ops['op_http_write'];
const message = `data: ${JSON.stringify(opMetrics)}\n\n`;
yield new TextEncoder().encode(message);
}
}
然后您将能够通过调用您的生成器函数来响应请求(在通过路径或 Accepts header 确认它是 SSE 之后):
import { readableStreamFromIterable } from "https://deno.land/std@0.95.0/io/streams.ts";
const stream = readableStreamFromIterable(generateEvents());
await respondWith(new Response(stream, {
headers: new Headers({ "Content-Type": "text/event-stream" }),
})).catch(err => { /* the client probably went away */ });
我已经上传了一个示例程序到https://crux.land/61HZ4a (Deno 1.9) 或 https://crux.land/84V4F (Deno 1.17) 可以像这样调用:deno run --unstable --allow-net=0.0.0.0 https://crux.land/84V4F
并包含一个显示 SSE 的测试页面收到的事件。
关于http2 - Deno 1.9 原生网络服务器 API 和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67109823/
Deno 声称与浏览器兼容。这是否意味着它有一个窗口/导航器对象,这对于设置 window.location 之类的东西意味着什么? 最佳答案 Deno 中的全局对象目前仅称为 window (和 g
如果我这样做 deno --help表明: compile = 将脚本编译成一个独立的可执行文件 install = 将脚本安装为可执行文件 这两个命令有什么区别? 最佳答案 命令 输出 自包含 1
假设我有 2 个脚本,father.ts 和 child.ts,我如何从father.ts 生成child.ts 并定期从father.ts 向child.ts 发送消息? 最佳答案 您必须使用 Wo
我想卸载 Deno 及其所有缓存包。它在哪里缓存它的包?以及如何确保在安装新版本的 Deno 之前卸载所有缓存包。 最佳答案 如果您使用默认安装位置,那么这里是您系统上的 deno 缓存位置: By
Deno 不使用任何像 npm 这样的包管理器,它只使用 URL 导入第三方依赖项。让我们看下面的例子: 从“https://deno.land/x/abc@v1.0.0-rc8/mod.ts”导入{
我在我的电脑上安装了 1.10.2 版本,我想使用 deno 的最后版本所以如何更新 deno 的版本? 我应该使用安装命令并重新安装吗或者有类似的东西 npm install -g npm@late
来自 this answer ,我知道父进程可以与童工对话,但反过来呢? 最佳答案 从你必须使用的 worker Worker.postMessage self.postMessage('hi') 在
我有一个生成 javascript 的可执行文件,我想将其通过管道传输到 deno run 中,但是 run 子命令似乎只将脚本路径作为参数,并且不支持 - 从 stdin 读取的通常约定。 我知道但
有一个 Deno.watch api 可以监视文件系统事件: const watcher = Deno.watchFs("/"); for await (const event of watcher)
我有一个向外部支持服务发出网络请求的服务。请求使用 TLS,所以我不能使用任何类型的主机名别名,并且开发和生产环境有不同的主机名。 我知道我可以使用 deno package将我的应用程序捆绑成一个单
我从 Drash ( https://github.com/drashland/deno-drash ) 下载了示例应用程序$ deno run --allow-run --allow-read --
我使用 NodeJS,但我知道 Deno 是一个 future 。我真的很想学习 Deno 并为之做出贡献,但我不知道我该如何开始或真正正确的路线图我可以构建以遵循正确的道路。 我真的很想学习和控制它
在 Deno 中,可以对 import 语句中的依赖项进行版本控制,并且没有 package.json喜欢 npm . 但是如何在一个地方管理它的 URL 和版本? 我将在我的系统中声明多个文件和依赖
我之前在 deno 中安装了一些脚本。 如何在 deno 中列出所有已安装的脚本? 是否有任何 deno 子命令可以执行此操作? 最佳答案 所有下载的脚本都存储在 $DENO_DIR/deps $DE
例如,假设我有以下代码: Deno.run({cmd: ['echo', 'hello']}) 我如何收集该命令的输出 hello ? 最佳答案 Deno.run返回 Deno.Process 的实例
我已经安装了 deno通过运行脚本: deno install https://deno.land/std/examples/welcome.ts 我现在如何卸载这个脚本? deno 中是否有可以卸载
我正在尝试使用标准的 deno fs 模块,但编译器提示没有 --unstable 标志。 import { writeJson, readJson } from "https://deno.land
如何解析 deno 中的 URL像 node.js url.parse()? 最佳答案 在 Deno 中解析 URL 不需要外部模块。 URL类作为全局可用,就像在您的浏览器中一样: const ur
我正在使用橡木/deno。我有一个从提供的 ejs 文件提交的表单。如何访问表单正文?当我将它记录到控制台时,它会打印: {type: "form", value: URLSearchParamsIm
尝试在 Deno REPL 中导入模块会导致以下错误: Uncaught SyntaxError: Cannot use import statement outside a module a
我是一名优秀的程序员,十分优秀!