2012-11-01 5 views
0

ASP.NET MVC 3에서 소셜 네트워크를 개발 중입니다. 모든 사용자는 연결된 사람들을 볼 수 있어야합니다.사용자가 로그 아웃하지 않고 브라우저를 닫습니다.

가장 좋은 방법은 무엇입니까?

내 데이터베이스에 Contact 테이블에 플래그를 추가했으며 사용자가 로그 아웃 할 때 true으로 설정하고 로그 아웃 할 때 false으로 설정합니다.

하지만이 솔루션의 문제점은 사용자가 로그 아웃하지 않고 브라우저를 닫을 때 여전히 연결 상태를 유지할 때 발생합니다.

답변

3

사용자가 현재 연결되어 있음을 실제로 알 수있는 유일한 방법은 사용자와 서버간에 일종의 연결을 유지하는 것입니다. 두 가지 옵션이 즉시 적용됩니다.

  1. 자바 스크립트를 사용하여 주기적으로 ajax를 사용하여 서버를 호출합니다. "마지막 연결 시간"상태를 업데이트하는 데 사용되는 특수 엔드 포인트를 서버에두고 사용자가 폴링하여 온라인 상태 인 사용자를 볼 수있는 두 번째 엔드 포인트가 있어야합니다.
  2. 구현하기가 매우 용이해야한다 서버

옵션 1과 지속적인 접속을 유지하기 위해 websocket를 사용합니다. 이것이 서버에 들어오는 요청의 양을 증가시킬 수 있다는 것을 명심해야하며, 생성 될 수있는 트래픽을 처리하기 위해 그에 따라 계획해야합니다. 자바 스크립트 타이머 호출을 서버로 다시 보내는 빈도를 구성하여 서버의로드 양을 제어 할 수 있습니다.

옵션 2는 라이브러리 지원없이이 작업을 수행 한 경우 좀 더 복잡 할 수 있습니다. 물론 이것을 수행하기가 쉬운 SignalR과 같은 라이브러리가 있습니다. 또한 각 사용자가 지속적 연결을 유지 관리하므로 사이트의 성능에 영향을 미칩니다. 이 접근법의 장점은 옵션 1처럼 폴링의 필요성을 줄입니다. 이 접근 방식을 사용하면 사용자 B에게 오프라인 상태 인 메시지를 사용자 A에게 전달하는 것이 매우 쉽습니다.

나는 또한 정말 쉬운 제 3 옵션을 언급해야한다고 생각합니다. 귀하의 사이트가 꽤 상호 작용하는 것처럼 느껴진다면, 귀하가 사이트에 요청한 마지막 시간을 추적 할 수 있습니다. 이것은 물론 사용자가 "연결되어 있는지"를 판단 할 수있는 충분한 정확성을 제공하지 못할 수도 있습니다.

+0

답장을 보내 주셔서 감사 드리며이 모든 세부 사항에 대해 옵션 2가 최선책입니다. 나는 그것을 구현하려고 노력할 것이다. – kbaccouche

관련 문제