2010-05-05 2 views
4

기본적으로 학습 목적으로 Omegle.com 복제 스크립트를 작성하려고합니다. 나는 PHP/MySQL/AJAX에서 그것을하고있다.사용자를 페어링하는 방법은 무엇입니까? (Omegle.com과 유사)

두 명의 사용자를 찾고 연결하는 데 문제가 있습니다. omegle의 목적은 두 명의 사용자를 "무작위로"연결하는 것입니다.

는 내가 지금하고 있어요 것은 다음

사용자가 세션이 할당 된 웹 사이트를 입력
  • . 사용자가 시작 버튼을 클릭하면
  • (채팅 일반, 대기,) 각 세션/사용자
  • 3 주 먼저 사용자에있다가 상태를 정상 상태와 필드 "connected_to"= NULL
  • 있다 "대기 중"이 지정됩니다. 그런 다음 상태가 Waiting 인 다른 사용자를 찾습니다. 하나를 찾지 못하면 루프 된 상태를 유지하고 "connected_to"가 변경 될 때까지 기다립니다. "connected_to"는 다른 사용자가 START를 클릭 한 다음 다른 사용자가 대기하고 이에 따라 세션을 업데이트 할 때 변경됩니다.

    • 사용자는 한 번에 하나의 사용자에 연결할 수 있습니다 :

  • 지금이 같은 몇 가지 문제를 가지고있다. 오메 글에서 동시에 여러 채팅을 열 수 있습니다.
  • 이것이 최선의 방법인지 나는 모른다.

채팅에 대해 각 사용자가 AJAX 호출로 서버의 이벤트를 폴링 중이며 매 초마다 여러 HTTP 요청 대신 오메 글을 보았고 한 번 요청하고 응답을 기다리는 중 대답을 얻을 때까지 PHP 스크립트가 무한 반복된다는 것을 의미합니다. 루프가 시작될 때마다 set_time_limit (30)을 사용하여이 작업을 수행했습니다. 그런 다음 Ajax 통화가 다시 시작되면 다시 시작하십시오. 이 접근법이 맞습니까?

나는 많이 당신의 답변을 주셔서 감사합니다, 는

카를로스 감사

답변

1

둘 다 가지고있는 개인적, 폴링 서버와 무기한 개방 요청을 떠나는 사이에 많은 차이가 표시되지 않습니다 명백한 장단점. 둘 다 시도하고 어느 것이 더 많은지보십시오. 여러 클라이언트를 처리하는 데 서버가 바쁜 경우 새 방문자에 대한 시간 초과 오류가 발생합니다. 그렇다면 사용자와 같은 대화방에서는 좋지 않은 상황입니다.

더 많은 일을 처리하고 나면 혜성 서버 나 웹 소켓을 조사하고 싶을 수도 있지만 먼저 채팅/일치 기능을 만드는 데 중점을 둡니다.

사용자가 여러 채팅을 할 수 있지만 여전히 채팅마다 일대일로 페어링되는 경우 사용자가 새로운 채팅을 원할 경우 (자발적이라고 가정) 개인적으로 솔루션에 대해 생각해 보겠습니다. 실제로 새로운 세션을 시작하십시오. 각 사용자 객체가 설명하는 것처럼 여러 개의 (또는 무한한) 채팅 세션을 가질 수 있도록 "정상, 대기 중, 채팅 중"과 같이 설정하십시오. 따라서 사용자 A가 방에 들어가면 "준비"버튼을 탭하면 초기 세션이 정상 상태에서 대기 상태로 변경됩니다. 일단 그가 누군가와 만났을 때, 새로운 "정상적인"세션이 시작되고, 어떤 버튼을 누르는 것으로 "대기 중"으로 바꿀 수 있습니다.

상수 반복을 일으킬 수있는 한 가지 사용 가능한 또는 대기중인 사용자가 몇 명인지 간단하게 쿼리하는 것입니다.0 인 경우 방의 모든 구성원을 반복하여 대기 중인지 여부를 확인하기보다는 0보다 높을 때까지 계속 확인하십시오.

두 번째 생각에서 총계를 계산하는 방법이있는 경우 대기중인 사람이 계산되므로 0 대신 1보다 커야합니다.

+0

감사합니다. 진행 방법에 대한 아이디어를 나에게 주셨습니다. 하지만 당신은 내가 사용자와 일치시키기 위해 사용하고있는 절차에 대한 당신의 의견을 말하지 않았습니다. 이것을하는 고전적인 방법과 같은 더 나은 방법을 알고 있습니까? 나는 바퀴를 재발 명하고 싶지 않다. 고마워. –

+0

또한 UPDATE의 결과를 테스트하여 쿼리가 수행되었는지 확인할 수 있습니다. 따라서 "대기 중"상태에있는 사용자와 채팅을 시작한 다른 사용자가 있다고 가정 해보십시오. 실행 : UPDATE 세션 SET status = '채팅'WHERE userid =? AND 상태 = '대기 중'입니다. 그런 다음 해당 업데이트가 1 행에 영향을 미쳤다면 사용자가 대기 중이던 것에서 채팅하는 것으로 이동 했으므로 좋다고합니다. (단락으로 밖으로이 콘텐츠를 분리하려하지만 stackoverflow의 자바 스크립트는 불쾌합니다). –

관련 문제