使用下面的代码时,客户端永远不会收到echo2
消息。第一个消息echo1
--在await之前,由客户端接收。如果删除await
,客户端将接收到这两条消息。
我知道await
以某种方式中断了WebSocket。我错过了什么?
服务器代码:
import {
Application,
Router
} from "https://deno.land/x/oak@v12.1.0/mod.ts";
const app = new Application();
const router = new Router();
async function pause(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
router.get("/ws", (ctx) => {
console.log("ws connected");
if (!ctx.isUpgradable) {
ctx.throw(501);
}
const ws = ctx.upgrade();
ws.onopen = () => {
ws.send(JSON.stringify({ intent: "init", id: "test" }));
};
ws.addEventListener("message", async (ev) => {
const d = JSON.parse(ev.data);
console.log("got message", d);
switch (d.intent) {
case "echo": {
ws.send(JSON.stringify({ intent: "echo1", data: { empty: true } }));
await pause(1000);
ws.send(JSON.stringify({ intent: "echo2", data: { empty: true } }));
break;
}
}
});
});
字符串
编辑:我使用一个简单的WS客户端Chrome扩展来测试WebSocket,而不是编写显式代码。
1条答案
按热度按时间vngu2lb81#
当我从deno
1.32.x
升级到1.34.3
时,这个问题自行解决。