Entenda os status de conexão do canal, os motivos das alterações e como lidar com cada transição.
Introdução ao recurso
Em cenários de áudio e vídeo em tempo real, a conexão entre cliente e servidor muda conforme os usuários entram ou saem dos canais. Problemas de rede também podem causar reconexões ou desconexões. Gerenciar adequadamente esses estados de conexão é fundamental para manter uma experiência de usuário estável e confiável.
Como funciona
Status da conexão
Quando o status da conexão muda, o ARTC SDK aciona o callback onConnectionStatusChange. A figura a seguir mostra os diversos status de conexão e suas transições quando os usuários entram e saem dos canais.
Reconexão automática
Durante uma chamada, se a conexão for perdida devido a problemas de rede, o SDK tenta se reconectar automaticamente. A figura a seguir ilustra os callbacks que o Usuário A e o Usuário B recebem quando o Usuário A entra em um canal onde o Usuário B está presente, perde a conectividade, tenta a reconexão automática e, por fim, falha ao se reconectar.
Em T0: O Usuário A inicia uma solicitação
joinChannel.Em T1: O Usuário A entra no canal com sucesso e recebe os callbacks
onJoinChannelResult(result=0)eonConnectionStatusChange.Em T2: O Usuário B detecta que o Usuário A entrou no canal e recebe o callback
onRemoteUserOnLineNotify.Em T3: A conexão do Usuário A é perdida devido à desconexão da rede do cliente ou a outros motivos.
Em T4: O SDK do Usuário A detecta a desconexão ou para de receber dados do servidor, inicia a reconexão automática e o Usuário A recebe o callback
onConnectionStatusChange.Em T5: Após várias tentativas em 100 segundos, o SDK ainda não consegue reentrar no canal e interrompe as tentativas. Ele envia o callback
onConnectionStatusChangepara o Usuário A. Nesse caso, o usuário deve sair do canal atual, verificar a conectividade da rede local e entrar novamente após a recuperação da rede.
Código de exemplo
Android
onConnectionStatusChange - Callback de alteração do status de conexão de rede
@Override
public void onConnectionStatusChange(AliRtcEngine.AliRtcConnectionStatus status, AliRtcEngine.AliRtcConnectionStatusChangeReason reason) {
super.onConnectionStatusChange(status, reason);
Log.e(TAG, "onConnectionStatusChange.");
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mLogView != null) {
mLogView.logI("Network connection changed to: " + status + ", reason: " + reason);
}
}
});
}
IOS
onConnectionStatusChange - Callback de alteração do status de conexão de rede
/**
* @brief Channel connection status change callback
* @param status Current status value, refer to AliRtcConnectionStatus enumeration for corresponding values
* @param reason Specific reason for the status change, refer to AliRtcConnectionStatusChangeReason enumeration for corresponding values
*/
- (void)onConnectionStatusChange:(AliRtcConnectionStatus)status reason:(AliRtcConnectionStatusChangeReason)reason{
NSString *stateStr = [NSString stringWithFormat:@"\nNetwork status: %@ status: %ld Reason: %@ reason: %ld\n",[self callbackNetstatus:status], (long)status,[self callbackNetstatusReason:reason], (long)reason];
MyLog(@"%@", stateStr);
}
Windows
OnConnectionStatusChange - Callback de alteração do status de conexão de rede
void AliSDKEventListener::OnConnectionStatusChange(int status, int reason)
{
if (win_rtc_listener_)
{
win_rtc_listener_->OnConnectionStatusChange(status, reason);
}
}
Descrição dos status
Status da conexão
|
Status da conexão |
Descrição |
|
Init |
Status inicial. Ocorre antes da chamada de |
|
Connecting |
Status transitório após a chamada do método |
|
Connected |
O aplicativo entrou no canal com sucesso. O SDK também aciona o callback |
|
Disconnected |
Ocorre após a chamada de |
|
Reconnecting |
A conexão foi interrompida. O SDK tenta se reconectar automaticamente. Se a reentrada for bem-sucedida, o SDK aciona onConnectionStatusChange (AliRtcConnectionStatusConnected, AliRtcConnectionChangedSignalingJoinChannelSuccess) |
|
Failed |
Falha na conexão. O SDK não conseguiu entrar no canal dentro de 100 segundos e parou de tentar a reconexão. O usuário deve chamar |
Descrição do motivo do status
|
Status da conexão (status) |
Descrição do motivo do status (reason) |
|
Init |
Sem motivo, status inicial. |
|
Connecting |
Connecting: Entrando no canal. |
|
Connected |
JoinChannelSuccess: Entrada no canal bem-sucedida. |
|
Disconnected |
LeaveRoom: O usuário saiu ativamente do canal. |
|
Reconnecting |
|
|
Failed |
JoinChannelFailure: Falha ao entrar ou reentrar no canal, possivelmente devido a desconexão persistente da rede ou token inválido. |