2017-01-25 3 views
2

사용자가 signalr을 사용하여 연결하고 연결을 끊을 때이를 감지해야합니다.연결 해제 사용자 신호기에서 감지

$.connection.hub 
      .start() 
      .done(function() { 
       hub.server.say("Hello SignalR"); 
}); 

하지만 분리를 어떻게 감지합니까 : 내가 그렇게 같은 연결 검출을 담당 Say 방법을 구현 한

public void Say(string message) 
{ 
    Trace.WriteLine(message + " - " + Context.ConnectionId); 
} 

public void Goodbye(string message) 
{ 
    Trace.WriteLine(message + " - " + Context.ConnectionId); 
} 

:

나는이 2 개의 허브 방법이 있나요?

+1

클라이언트에서'$ .connection.hub.disconnected (function() {...') 또는 허브에서'OnDisconnected (bool stopCalled) {'를 덮어 쓰는 것. – stuartd

+0

@stuartd 전화를 걸 수없는 것 같아요. 허브 메서드는 콜백에서 $ .connection.hub.disconnected (function() { hub.server.goodbye ("bye"); }); 작동하지 않습니다. – frc

+0

음, 클라이언트가 작동하지 않습니다. 연결이 끊겼습니다 ** – stuartd

답변

1

하면 Hub 클래스로이 오버라이드 (override) 메서드를 추가합니다

public override Task OnDisconnected(bool stopCalled) 
{ 
    // do the logging here 
    Trace.WriteLine(Context.ConnectionId + ' - disconnected'); 
    return base.OnDisconnected(stopCalled); 
} 

이 처리하고 나는 그것이 당신의 SignalR 확률이 낮다대로 client 측면을 추적하는 것은 의미가 없게 생각하면서 서버 측에서 disconects를 기록합니다 세션은 서버 측에서 종료됩니다 (see here). @stuartd 코멘트에 관해서

편집 : 당신은 또한 클라이언트가 서버에 다시 연결하고 성공하려고 할 때

public override Task OnReconnected() 
{ 
    Trace.WriteLine(Context.ConnectionId + ' - reconnected'); 
    return base.OnReconnected(); 
} 

그래서 당신이 사건을 추적 할 수 있습니다 오버라이드 (override) 할 수있다.

편집 # 2 : 그런 다음 당신은 물론 OnConnected 이벤트의 추적을 위해 동일한 메커니즘을 사용할 수는

public override Task OnConnected() 
{ 
    Trace.WriteLine(Context.ConnectionId + ' - reconnected'); 
    return base.OnConnected(); 
} 

그래서 모든 추적 코드가 편리 클라이언트가있을 때 경우에보다 강력한되는 단지 서버 측에 유지 허브에 로그인했지만 어떤 이유로 로그 된 상태를 추적하는 데 사용하는 메소드를 실행하지 못했습니다.

+1

클라이언트 쪽은 재접속을 시도 할 수 있습니다 .. – stuartd

+0

실제로 나는 그것이 차이를 만든다고 생각하지 않습니다.이 방법이 클라이언트 측에서 연결을 끊었을 때 클라이언트 측에서는 클라이언트 측에서 다시 연결하는 경우를 대비하여'Hub' 클래스의 public override Task OnReconnected()를 호출하여 어쨌든 로깅 될 수 있도록하거나 뭔가를 놓치고 있습니까? –

+0

질문을 다시 읽는 것에 동의합니다. – stuartd