2017-02-17 7 views
0

채팅 응용 프로그램에서 smack 클라이언트를 사용하고 있습니다. 모든 것이 정상적으로 진행될 것입니다. 그러나 어떤 이유로 연결이 중단되면 내 서버가 해당 사용자 JID에게 온라인으로 표시됩니다.사용자가 서버에 연결되어 있지 않아도 사용자가 온라인 상태입니다. 서버에 다시 연결하지 못했습니다.

제 문제는 연결을 끊은 후 서버에 다시 연결하는 방법입니다. 내 서비스 스레드에서 connection.isAuthenticated() 메서드를 사용하여 연결을 잡을 수 있습니다. 그러나 서버에 다시 연결할 수 없습니다.

답변

0

서버 측 (ejabberd)에서 mod_ping 모듈을 사용하면 클라이언트가 연결을 끊었지만 온라인 상태 인 경우 온라인 문제를 해결할 수 있습니다. 이는 TCP/IP가 작동하는 방식과 관련이 있으며 ejabberd에만 국한되지는 않습니다. 일반적으로 Linux는 2 시간 후에 연결 손실을 감지하도록 구성되어 있으며 클라이언트 측에서 ReconnectionManager를 사용하여 ejabberd 서버에 응용 프로그램을 다시 연결하거나 서버에 연결되어 있지 않은 경우 활성 연결을 추적하도록 자체 처리기를 정의하여 다시 연결할 수 있습니다. 여기 mod_ping 확인 - https://docs.ejabberd.im/admin/configuration/#modping