针对这个问题,我做了如下测试:p0 创建 playerTtl=5 的房间,p1 加入后断线,p0 也离开房间(为了使房间销毁);等待 10s 后,p1 重连并返回房间(reconnectAndRejoinRoom()),此时会报加入房间错误(房间不存在),然后可以再创建其他房间,结果符合预期。具体代码如下:
function wait(delay) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, delay);
});
}
it('test reconnectAndRejoin', async () => {
const roomName = 'tm3_r';
const p0 = newPlay('tm3_0');
const p1 = newPlay('tm3_1');
await p0.connect();
const roomOptions = {
playerTtl: 5,
};
await p0.createRoom({ roomName, roomOptions });
await p1.connect();
await p1.joinRoom(roomName);
await p1.disconnect();
await p0.leaveRoom();
await wait(10000);
try {
await p1.reconnectAndRejoin();
} catch (err) {
if (err.code === 4301) {
debug('rejoin failed');
await p1.createRoom();
await p0.disconnect();
await p1.disconnect();
}
}
});
你提到的 connect 失败,是否是因为网络连接没有建立起来呢?reconnectAndRejoinRoom() = reconnect() + rejoinRoom()