Koa 2路由器如何进行长轮询请求

时间:2016-12-23 14:03:50

标签: long-polling koa2

我想提出一个很长的汇集请求。所以我想提出请求并在一段时间后发送回复。可能吗?

我正在尝试使用async / await synax,但它对我不起作用(我在客户端上收到错误404)

非常感谢你的帮助。

这是我的服务器

import 'babel-polyfill';
import Koa from 'koa';
import Router from "koa-router";

import fs from "fs";


const router = new Router();

const convert = require('koa-convert')
const serve = require("koa-static");

const app = new Koa();


router
  .get('/*', async function (ctx, next) {



            ctx.response.type = 'text/html; charset=utf-8';

            /* await (() => {
                setTimeout( () => {ctx.body = fs.readFileSync(__dirname + "/public/index.html")}, 1000)
            })(); */

            //ctx.body = fs.readFileSync(__dirname + "/public/index.html");


  })

app.use(convert(serve(`${__dirname}/public`)))
app.use(router.routes()).use(router.allowedMethods());

app.listen(3000);

1 个答案:

答案 0 :(得分:3)

一般来说,是的。这是可能的。

您的代码中存在的问题是,await基于承诺而非常明显。所以你的超时功能需要封装成一个promise。这样的事情可以奏效:

...
function delayed(ctx, ms) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            ctx.body = fs.readFileSync(__dirname + "/public/index.html")
            resolve();
        }, ms);
    })
}

router.get('/*', async function (ctx, next) {
    ctx.response.type = 'text/html; charset=utf-8';
    await delayed(ctx, 1000);
})
...