나는 API를 제공해야하는 서버를 리눅스에 작성하고있다.멀티 스레드 서버 문제
처음에는 하나의 포트에서 다중 스레드를 만들고 싶었습니다. 즉 단일 포트에서 여러 요청을 처리 할 때 여러 스레드가 작동하도록하고 싶었습니다.
내 친구 중 한 명이 그것이 그것이 작동하도록되어있는 방식이 아니라고 말했습니다. 그는 요청이 수신되면 먼저 Handshake
절차를 따라야하며 요청에 전용 된 다른 포트를 수신하는 스레드를 만든 다음 요청 된 클라이언트를 새 포트로 리디렉션해야한다고 말했습니다.
이론적으로는 매우 재미 있지만 핸드 셰이크를 구현하고 리디렉션을 수행하는 방법에 대한 정보를 찾을 수 없습니다. 누군가 도울 수 있습니까? 내가 메인 스레드가 포트에 듣기, 요청을 처리하기 위해 새로운 스레드를 생성하여 다중 스레드 서버를 작성하면 나는 당신의 응답을 해석하는 잘못 아니에요 경우
, 나는 기본적으로 그것을 멀티 스레드 만들고 있어요 단일 포트?
매초 많은 요청을받는 시나리오를 생각해보십시오. 포트의 모든 요청이 "현재"요청이 완료 될 때까지 대기해야한다는 것은 사실이 아닙니까? 그렇지 않다면 어떻게 통신을 계속할 것인가? 브라우저가 요청을 보내면, 이것을 처리하는 쓰레드는 먼저 포트를 듣고, 블록하고, 처리하고, 응답 한 다음 블록을 해제해야한다.
"multithreads"가 있는데, 포트가 차단되어 있기 때문에 메인 스레드와 별도로 한 번에 하나의 스레드 만 사용하고 있습니다.
동일한 로컬 포트에 동시에 두 개 이상의 연결을 활성화 할 수 있습니다 - 이것에 절대적으로 아무런 문제가 없으며 모든 것이 정상적으로 작동합니다. 하나의 연결은 다른 연결을 "차단"하지 않습니다. 일단 만들어지면 완전히 독립적입니다. – caf
안녕하세요. 댓글 주셔서 감사합니다. 나는 당신이 만들고있는 요지를 완전히 얻었고, 실제로 혼란스러워하고 있습니다. 하나 이상의 포트를 사용하는 연결이 두 개 이상일 경우 두 개의 서로 다른 클라이언트가 같은 포트에 연결한다는 것을 의미하므로 읽기/쓰기가 올바르게 수행되고 정보가 올바른 클라이언트로 전송되는 방법은 무엇입니까? 소켓 및 서버 프로그래밍에 대한 책/기사를 읽으려고했지만 잘못된 장소에서 해결책을 찾고 있음을 깨달았습니다. 누구든지이 주제에 대해 깔끔하고 작은 안내서를 제안 할 수 있습니까? –
응용 프로그램의 관점에서 두 연결은 서로 다른 소켓, 즉 다른 파일 설명자로 나타납니다. 전송 (TCP/IP) 관점에서, 두 개의 연결은 서로 다른 (원격 IP, 원격 포트, 로컬 IP, 로컬 포트) 튜플 (원격지 중 하나 또는 둘 모두)에 의해 식별됩니다. 주소는 다를 것입니다). – caf