2009-05-07 4 views
1

나는 야후 메신저를 사용하여 친구들과 채팅하고 있습니다. 내 친구가 온라인으로 올 때마다 (거의 중간에) YM이 나를 알릴 것입니다. 야후! (및 다른 회사)이 이것을 구현합니까?다른 사용자에게 알림을 보내는 방법은 현재 온라인 상태입니까?

  • 는 당기 : 지금까지 내가 추측 으로이 문제를 해결하기 위해 몇 가지 방법이 있습니다 클라이언트 지속적으로 (500ms로 기간, 어쩌면)는 (사용자의 목록에서) 어떤 사용자에 대해 단지 온라인 및 한 서버에 요청 그런 다음 사용자에게 알립니다.

  • 푸시 : 서버는 어떤 사용자가 온라인 상태인지 결정한 다음 클라이언트에게 알림을 전송합니다.

두 번째 방법은 훨씬 더 수용 가능합니다. 사용자의 데이터에는 친구 목록 (목록에 추가 한 사용자)이 포함될 수 있으며 로그인 이벤트가 발생하면 서버 앱은이 목록에있는 모든 사용자에게 알림 메시지를 보냅니다.

정상적으로 이것은 내 생각입니다. 현실에서 어떻게 구현 되었습니까? 말해 줄 수 있어요?

감사합니다.

+0

YM이 "거의 즉시"알려주는 것을 어떻게 알 수 있습니까? 그것이 귀하에게 통보하기로 결정한 것은 귀하의 인식입니다. –

+0

나는 로그인했는데 "즉시"내 방 친구 친구의 바탕 화면에 알림을 보았습니다! – Vimvq1987

답변

0

HTTP 요청이 오래 지속되었을 수 있습니다. IM 클라이언트는 서버에서 HTTP 메소드를 호출하지만 서버는 업데이트가있을 때까지 응답하지 않습니다. 그 시점에서 "업데이트"로 응답하고 IM 클라이언트는 다른 HTTP 메소드를 호출하여 업데이트를받습니다.

인터넷에서 많은 (대부분?) 사람들이 NAT 라우터 뒤에 있으므로 실제 푸시를 수행 할 수 없습니다.

2

야후 메신저가 실행되는 동안 일어나는 일을 정확히 알아보기 위해 Wireshark 또는 다른 네트워크 트래픽 관리자를 사용하는 것이 좋습니다.

0

이 기술은 Buddy Check과 유사한 기술을 사용하지만 사용자가 알기를 원하는지 여부 만 알 수 있습니다. 그러나 버디 체크 실제로 당신에게 진실을 제공합니다.

0

나는 소스 코드 나 네트워크 패킷을 직접 살펴보고 다른 관점에서 생각해 볼 수있는 것에 동의한다. 수십만 명의 사용자가 있고 대부분의 사용자가 몇 개 정도있을 때 어떤 접근 방식이 더 유용할까요? 열 친구?

  1. 수백 사용자가 서버에 몇 초마다 부하 = 제비 가능성이 훨씬 작은 규모에서 발생 클라이언트에
  2. 푸시 아웃 업데이트를 자신의 친구의 상태가 변경 핑의 수천을 가지고 - 몇 가지마다 업데이트를 몇 분.
1

"푸시 아키텍처"여야합니다.

서버는 많은 사용자에 대해 일정 당기기를 허용 할 수 없습니다.

3

서버가 데이터를 푸시합니다. 서버에는 친구들의 목록이 있으며, 더 중요한 것은 목록에있는 사람의 목록입니다. 사인 온하면 두 번째 목록을 살펴보고 연결된 각 클라이언트에 메시지를 보냅니다. 정말 간단합니다. 구체적인 구현 세부 사항은 Pidgin의 소스 코드 (pidgin.im)를 살펴보십시오.

0

로그인하면 Yahoo는 온라인 상태 인 귀하의 목록에있는 모든 사용자에게 '온라인 이벤트'를 전송합니다 (푸시).연결이 HTTP를 통해 이루어지면 연결을 유지하기 위해 사용자와 Yahoo 서버간에 ping/pong 교환이 이루어집니다 (wikipedia) - NAT 및 기타 등을 통해이 밀어 넣기가 가능합니다. 그렇지 않으면 로그인 기간 동안 TCP/IP 연결이 활성화됩니다. ping/pong이 성공적이지 않은 경우 (여러 번 재 시도한 후 가정 함) Yahoo 서버는 온라인 친구들에게 '오프라인 이벤트'를 알리는 메시지를 보냅니다.

질문에 대답하기 위해 푸시입니다.

0

Gmail을 통한 gtalk를 알고 있으며 Facebook은 comet을 사용합니다. 이것은 좋은 기술이지만 비싼 것처럼 보입니다. 이 내용은 PHP에 대해 good tutotial입니다.

관련 문제