2016-07-23 1 views
0

다른 "임의"클라이언트와 클라이언트를 일치시키는 임의 채팅 응용 프로그램을 개발 중입니다. Pseudo-Random 클라이언트는 "열린"클라이언트 목록을 쿼리하고 목록의 맨 위에서 선택하기 때문에 무작위입니다.1 대 1 랜덤 중매

답변을 검색했지만 mySQL의 관계형 데이터베이스를 기반으로하는 중매 솔루션에 대한 리소스가없는 것 같습니다. 내가 만난 문제는 모든 클라이언트가 "검색"으로 설정된 경우 각 (사용자)가 하나 (a)에 연결하려고 시도하는 동안 (a) 다른 클라이언트 (b)에 연결하려고 시도한다는 것입니다. {a 사용자가 a를 추격하다가 동시에 쫓고있다.}

둘 모두가 일치하지 않는 클라이언트 풀에있을 때 두 명의 임의의 클라이언트를 연결하여 정보를 교환하는 가장 단순한 구조와 프로세스는 무엇일까요?

답변

1

정확하게 찾고있는 것이 확실하지 않지만 각 클라이언트가 데이터베이스에 연결할 다른 클라이언트를 적극적으로 찾는 대신 모든 클라이언트가 중매 만들기 풀에 자신을 입력하도록 할 수 있습니다. 그런 다음 서버에서 실행되는 별도의 프로세스가 데이터베이스를 확인하고 원하는 기준에 따라 사람들을 일치시키고 '검색'테이블에서 해당 프로세스를 제거합니다. 이렇게하면 사람들이 둘 이상의 사람과 동시에 대응할 수 없게됩니다.

다소 도움이 되었기를 바랍니다.

+0

네, 확실히 수수께끼입니다. 데이터베이스에서 풀을 지속적으로 확인하고 각 사용자를 할당하는 중재자 역할을하는 PHP 스크립트를 어떻게 설정합니까? 그것이 내가 머리를 쓰지 못하는 부분이다. –

+0

나는 최근에 비슷한 것을 만들었습니다. 사용자를 검색하기 위해 데이터베이스를 폴링하는 while 루프가없는 스크립트를 가질 수 있으며, 두 개가 발견되면 검색 테이블에서 해당 항목을 제거하고 각 클라이언트에 연결 정보를 보냅니다. 스크립트가 검색 테이블에서 아무것도 찾지 못하면'sleep (1)'을 실행 한 다음 반복합니다. 물론 PHP는 장기 실행 프로세스를 만드는 최고의 언어는 아닙니다.하지만 Supervisord와 같은 프로세스 관리자를 사용하여 스크립트가 충돌하는 경우에도 스크립트가 실행되도록 유지한다면 괜찮은 해결책입니다. – JrBaconCheez