2016-09-29 5 views
1

cometd를 버전 2.5에서 3.0.9로 업그레이드하지만 웹 소켓은 비활성화되었습니다. 변경 사항 중 하나는 다음과 같습니다. - org.cometd.server.ServerSessionImpl disconnect() 메소드는 "/ meta/disconnect"채널에 게시하기 전에 더 이상 메시지의 성공적인 플래그를 설정하지 않습니다. GitHub cometd 저장소에서 2015 년 10 월 14 일에 커밋의 일부로 제거되었음을 알았습니다. - 서버 측 연결 해제 처리가 개선되었습니다 (사용자 sbordet).CometD v3.0.9 - 서버 쪽 연결 끊기가 메시지 (채널/메타/연결 끊기)에 성공 플래그를 설정하지 않습니다.

public void disconnect() 
{ 
    boolean connected = _bayeux.removeServerSession(this, false); 
    if (connected) 
    { 
     ServerMessage.Mutable message = _bayeux.newMessage(); 
     message.setChannel(Channel.META_DISCONNECT); 
     // message.setSuccessful(true); 
     deliver(this, message); 
     flush(); 
    } 
} 

이제 클라이언트 측에서, 우리는 cometd (jquery.cometd.js)와 인터페이스 jQuery를 사용하고 있습니다. 우리는 서버 측에서 cometd 연결 해제 메시지를받을 때마다 다시 연결을 발행합니다. 다시 연결하기 전에 아래의 조건을 확인합니다. 자사가 분리 API 변경으로 인해 서버 측에서 설정하지로

$.cometd.isDisconnected() && (message.channel == "/meta/disconnect" && message.successful) 

message.successful 검사가 실패합니다. 따라서 세션은 결코 다시 연결/복원되지 않으므로 서버가이 세션에 대해 전혀 알지 못하도록 유도하므로 서버 측은 서버를 클라이언트 측 서비스 메시지로 푸시하지 않습니다.

이 검사를 유지하려는 경우, 로그 아웃하는 동안이 플래그는 성공적으로 설정됩니다. 로그 아웃 중에 클라이언트 측 메소드를 호출하여 서버 측 DisconnectHandler (BayeuxServerImpl 아래)가 호출되도록합니다. DisconnectHandler 메시지 이벤트는 응답 메시지에서이 플래그를 true로 설정합니다. 처음에

$.cometd.disconnect() 

은 어떤 더, 분리가 서버 측에서 시작될 때 (이 DisconnectHandler 행동과 일치하도록 기대) cometd 분리 메시지에 설정되지 성공 플래그 이유를 이해합니다. 두 번째로,이 플래그를 여전히 설정할 수있는 대안이 있습니까? 즉, 클라이언트 또는 서버 측에서 재정의 할 수 있습니까?

답변

1

서버 쪽 연결 해제 메시지에서 클라이언트 시작 연결의 응답이 아닌 요청되지 않은 메시지이고이 두 메시지를 구별 할 필요가 있으므로 서버 쪽 연결 해제 메시지에서 플래그가 제거되었습니다.

원치 않는 메시지에는 id 또는 successful 필드가 없습니다.

서버가 클라이언트의 연결을 끊은 경우 해당 클라이언트에 다시 연결하려면 /meta/disconnect 채널에 대한 수신기를 등록하기 만하면됩니다. 요청하지 않은 연결 끊기와 연결 해제 응답의 경우 청취자가 호출되며 원하는 경우 handshake()을 다시 입력 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다 Simone. 이해할 수 있도록 message.Successful 체크를 옵션으로 제공 할 수 있습니다. 즉,/meta/disconnect 리스너 아래에서 사용할 수있는 경우에만이 플래그를 확인하십시오. 따라서이 검사는 클라이언트가 시작한 연결 해제의 경우처럼 계속 진행되며이 플래그가 없기 때문에 서버가 시작한 연결 (즉, 요청하지 않은 메시지)에 대해서는 발생하지 않습니다 .. – crathour

+0

별도의 메모에서 우리는 항상 아래 정보 예외를 기록합니다 cometd javascript로 업그레이드 한 후 브라우저 콘솔에 추가 할 수 있습니다. 그러나 이것은 어떤 기능에도 영향을 미치지 않습니다. 우리가 걱정해야 할 것이 있나요? '확장 재실행 실행 중 예외 ' 초기 관찰은 메시지가/meta/connect 채널에 속하고 ID가 "402 : 알 수없는 클라이언트"일 때 일반적으로 발생한다는 것이 관찰되었습니다. 다른 경우에는 매우 잘 진행될 수 있지만 확실하지는 않습니다. 결국, 다시 연결 논리는 메시지가 유효한 ID를 가지게하므로 영향을주지 않습니다. – crathour

+0

'확장 리로드 추상 실행 중 예외 '는 당신이 "추상"메소드를 오버라이드하는 쿠키 라이브러리를 가지고 있지 않기 때문에 발생합니다. 무엇을 사용합니까, jQuery 또는 Dojo입니까? – sbordet