Eu preciso saber se 2 pares estão conectados em chamada quando recebemos a mensagem - o estado de conexão do gelo está desconectado, fecha todas as janelas e dicsonnect 2 pares. Podemos reconectar quando o servidor de gelo se desconectar?
O estado de gelo desconectado deve ser recuperável, mas atualmente esta biblioteca fecha a conexão prematuramente. Até que isso seja resolvido, o melhor que você pode fazer é colocar um timer em erro e reconectar.
Quero saber como posso reconectar quando o iceconnection desconectar. Eu tentei muitos códigos, mas não funciona
Quero saber como posso reconectar quando o iceconnection desconectar. Eu tentei muitos códigos, mas não funciona
Esta biblioteca não permitirá que você faça uma recuperação normal do estado desconectado porque ela fecha imediatamente a conexão. A única coisa que você pode fazer é ouvir on('error')
e, em seguida, conectar-se exatamente da mesma forma que fez quando configurou sua conexão original. É uma grande dor.
nota: existem dois locais para verificar se há erros. No próprio peer e na própria conexão. Na conexão, eles são quase todos fatais do jeito que esta biblioteca é agora, embora não devessem ser. No próprio peer, muitos dos erros são fatais, mas não todos.
Para erros de soquete no par, tenho algo assim:
this.peer.on('disconnected', () => {
this.disconnectBackoff = 1;
this.retrySocketConnection();
});
onde backoff é um valor em segundos que eu incremento toda vez que tento até o máximo.
Para o erro de par, tenho algo assim:
// Non-Fatal error:
// 'peer-unavailable' = maybe they left?
// 'disconnected' = this means the Peering server disconnected, we have a seperate retry for that on('disconnect')
// pretty much all of the rest are fatal.
const FATAL_ERRORS = ['invalid-id', 'invalid-key', 'network', 'ssl-unavailable', 'server-error', 'socket-error', 'socket-closed', 'unavailable-id', 'webrtc'];
this.peer.on('error', (e) => {
if (FATAL_ERRORS.includes(e.type)) {
this.reconnectTimeout(e); // this function waits then tries the entire connection over again
} else {
console.log('Non fatal error: ', e.type);
}
});
E então para a conexão (mediaConnection no meu caso) eu tenho isso.
call.on('error', (e) => {
console.warn('error with stream', e);
if (initiator) { // initiator is a value I set myself
// Optionally this should call only the user that failed instead of the whole thing
this.reconnectTimeout();
}
});
E o mencionado reconnectTimeout
é uma função simples que tenta a conexão inteira novamente.
Em teoria, essa biblioteca poderia lidar com iceRestarts
e não ser fatal na desconexão do gelo, o que eu acredito que resolveria a maioria dos problemas. Eu tenho um PR para a coisa de desconexão, mas ainda não para as reinicializações.
Senhor, estou usando peer.js para todo o projeto, aqui está o link para o arquivo peerjs
https://github.com/peers/peerjs/blob/master/dist/peerjs.js
agora o que estou tendo problema quando 2 pares se conectam para videochamada, quando um par obtém uma conexão lenta iceconnection desconecte os dois pares
e este é o código no arquivo peerjs onde está desconectando ambos
`` `
peerConnection.oniceconnectionstatechange = function () {
switch (peerConnection.iceConnectionState) {
caso "falhou":
logger_1.default.log ("iceConnectionState falhou, fechando conexões com" + peerId);
_this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Negotiation of connection to " + peerId + " failed."));
_this.connection.close();
break;
case "closed":
logger_1.default.log("iceConnectionState is closed, closing connections to " + peerId);
_this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Connection to " + peerId + " closed."));
_this.connection.close();
break;
case "disconnected":
logger_1.default.log("iceConnectionState is disconnected, closing connections to " + peerId);
_this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Connection to " + peerId + " disconnected."));
_this.connection.close();
break;
case "completed":
peerConnection.onicecandidate = util_1.util.noop;
break;
}
_this.connection.emit(enums_1.ConnectionEventType.IceStateChanged, peerConnection.iceConnectionState);
}; // DATACONNECTION.
please check this code
caso "desconectado":
logger_1.default.log ("iceConnectionState está desconectado, fechando conexões com" + peerId);
_this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Connection to " + peerId + " disconnected."));
**_this.connection.close();**
`` `
aqui a conexão chega perto e aqui eu quero reconectar a conexão de gelo
Releia minha resposta. Expliquei tão claramente quanto sei.
Esta biblioteca não permitirá que você faça uma recuperação normal do estado desconectado porque ela fecha imediatamente a conexão. A única coisa que você pode fazer é ouvir ('erro') e conectar da mesma forma que você fez quando configurou sua conexão original. É uma grande dor.
Sua única outra opção é fazer um fork ou usar meu fork aqui: https://github.com/peers/peerjs/pull/655
alguma outra opção? ou se você pode me ajudar em peer js onde e qual código devo escrever em caso de erro?
estou realmente preso senhor ....
@jrowny obrigado por uma investigação. vamos enviá-lo em 1.3.0
Comentários muito úteis
Esta biblioteca não permitirá que você faça uma recuperação normal do estado desconectado porque ela fecha imediatamente a conexão. A única coisa que você pode fazer é ouvir
on('error')
e, em seguida, conectar-se exatamente da mesma forma que fez quando configurou sua conexão original. É uma grande dor.nota: existem dois locais para verificar se há erros. No próprio peer e na própria conexão. Na conexão, eles são quase todos fatais do jeito que esta biblioteca é agora, embora não devessem ser. No próprio peer, muitos dos erros são fatais, mas não todos.
Para erros de soquete no par, tenho algo assim:
onde backoff é um valor em segundos que eu incremento toda vez que tento até o máximo.
Para o erro de par, tenho algo assim:
E então para a conexão (mediaConnection no meu caso) eu tenho isso.
E o mencionado
reconnectTimeout
é uma função simples que tenta a conexão inteira novamente.Em teoria, essa biblioteca poderia lidar com
iceRestarts
e não ser fatal na desconexão do gelo, o que eu acredito que resolveria a maioria dos problemas. Eu tenho um PR para a coisa de desconexão, mas ainda não para as reinicializações.