Tec*_*tor 1 javascript events cloudflare fetch-api cloudflare-workers
有没有办法使用 cloudflare 工作人员执行服务器端事件?我只找到了一种方法,但它会在返回响应后立即停止。
const { readable, writable } = new TransformStream();
const response = {
headers: new Headers({
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
Connection: 'keep-alive',
}),
status: 101
};
setInterval(() => {
const encoder = new TextEncoder();
const writer = writable.getWriter();
writer.write(encoder.encode(`data: hello\n\n`));
}, 5000);
return new Response(readable, response);
Run Code Online (Sandbox Code Playgroud)
您的示例代码有两个问题:
getWriter(),但只能有一个 Writer,因此在第一个间隔之后的间隔中,调用失败。getWriter()您应该在设置间隔之前调用一次,然后重用该编写器。在预览中运行代码时(例如在 cloudflareworkers.com 上或在 Cloudflare 仪表板中,或使用wrangler preview或wrangler dev),这两个问题都会在 JavaScript 控制台中显示为错误。我建议使用预览来调试代码,因为它可以告诉您客户端不可见的错误。
以下代码在预览中适用于我——文本按预期每 5 秒添加到响应中:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const { readable, writable } = new TransformStream();
const encoder = new TextEncoder();
const writer = writable.getWriter();
setInterval(() => {
writer.write(encoder.encode(`data: hello\n\n`));
}, 5000);
return new Response(readable);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2367 次 |
| 最近记录: |