我最近使用 PeerJS 开发了一个 Web 应用程序,并正在尝试添加重新连接功能。
基本上,我的应用程序由创建客户端然后连接到的服务器的人工作。服务器人员可以控制主机正在做什么,但它是基本的双向通信。
如果客户端断开连接,他们只需重新连接即可正常工作。但是,如果服务器用户刷新页面,或者他们的计算机崩溃,那么他们需要能够重新建立对客户端的控制。
首先是重新获得原始连接 ID 和对等 api ID,这很好也很容易,因为它们存储在数据库中并分配了一个唯一的 ID,服务器用户可以使用它来查询它们。然后为了使客户端重新连接,我在关闭时执行此操作:
// connection is closed by the host involuntarily...
conn.on('close', function() {
// if the clients connection closes set up a reconnect request loop - when the host takes back control
// the client will auto reconnect...
connected = false;
conn = null;
var reconnect_timer = setInterval(function () {
console.log('reconnecting...'); // make a fancy animation here...
conn = peer.connect(connectionid, {metadata: JSON.stringify({'type':'hello','username':username})});
// upon connection
conn.on('open', function() { // if this fails need to provide an error message... DO THIS SOON
// run the connect function...
connected = true;
connect(conn);
});
// didnt connect yet
conn.on('error', function(err) {
connected = false;
});
if(connected === true) {
clearInterval(reconnect_timer);
}
}, 1000);
});
这似乎可行,因为在服务器端,客户端看起来已经重新连接 - 连接功能已触发等。但是无法在两者之间发送消息,并且客户端控制台说:
Error: Connection is not open. You should listen for the `open` event before sending messages.(…)
上面显示“打开”事件已被收听的地方......
我希望这很清楚 - 任何帮助表示赞赏:)