首页 > 解决方案 > 开玩笑 - 多个 websocket 连接挂起开玩笑

问题描述

我正在使用这个函数,它通过 numberOfBots 参数根据需要创建尽可能多的 websocket 连接,以测试是否所有客户端都收到了我需要的消息。

function checkGameStart(numberOfBots) {
    return new Promise((resolve, reject) => {
        let clients = [];
        let connection = [];
        for (let i = 0; i < numberOfBots; i++) {
            clients.push(new WebSocket('ws://127.0.0.1:8080'));
            connection.push(false);
            clients[i].onmessage = (msg) => {
                let data = JSON.parse(msg.data);
                if (data.title === "gameStarted") {
                    connection[i] = true;
                    checkAllClientsReady();
                }
            }
            clients[i].onerror = (err) => reject(err);
        }
        function checkAllClientsReady() {
            if (!(connection.includes(false))) {
                resolve(true);
                closeAllConnections();
            }
        }
        function closeAllConnections() {
            for (let i = 0; i < clients; i++) {
                clients[i].close()
            }
        }
    });
}

在浏览器中,它可以 100% 运行。浏览器控制台打开 4 个连接并在解决承诺之前等待消息。然而,Jest 似乎超过了 15 秒,这很奇怪,我很好奇为什么。

标签: node.jsjestjs

解决方案


推荐阅读