나는 기본적인 중매 서버를 개발 중입니다. 기본 프로세스는 다음과 같이 진행됩니다다른 스레드에서 보내기 및 받기
- 클라이언트가 클라이언트의 이름과 그들이 다시
- Server 리포트 그/그녀와 일치
- 클라이언트가 선택 가능한 모든 일치를 찾고 있습니다 일치 유형을보고, 서버에 연결
- 서버와 짝을하고 싶은 것은 두 클라이언트에게 일치
문제 클라이언트가 연결될 때마다, 나는 모든 가능한 일치에 새로운 클라이언트를보고, 모든보고 필요가있다 새로운 연결 클라이언트와 일치 할 가능성이 있습니다 (따라서 일치하지 않는 클라이언트는 항상 서버에서 recv
으로 준비되어야합니다). 동시에 클라이언트는 언제든지 일치 항목을 선택하거나 연결을 끊을 수 있습니다 (따라서 클라이언트는 항상 send
으로 준비되어야하며 서버는 recv
으로 준비되어야합니다)
이 문제의 실제 해결책은 다음과 같습니다. 스레딩을 사용하려면 클라이언트와 서버에 대한 백그라운드 스레드 recv
과 메인 사용자 상호 작용 send
스레드.
- 는 서로 다른 스레드에서 동시에 동일한 소켓 연결
send
및recv
에 저장되어 있습니까? - 이것을 처리하는 것이 올바른 방법입니까?
합니다 (단절이 C에 내장되어 있기 때문에 C와 같은 ++ 및 OBJ-C를 태그 ++ 및 클라이언트는 OBJ-C)
프로젝트가 Objective-C에만 국한되지는 않았지만 확장 가능한 asych을 구축하는 Grand Central Dispatch를 제공한다는 점을 알고 있습니다. I/O는 상대적으로 고통스럽지 않습니다. 작은 학습 곡선이 있지만 청취/recv/전송에 잘 작동하며 필요한 경우 각 소켓에 대해 새 대기열을 만들 수 있습니다. – dans3itz