1

웹 서버가 동시에 많은 HTTP 요청 및 응답을 처리하는 방법을 알고 싶습니다. 네트워크 프로그래밍에 익숙하지 않다는 것을 명심하십시오.포트 80의 HTTP 통신

웹 서버가 동시에 포트 80에서 여러 HTTP 응답을 보낼 수 있습니까? 또는 응답을 "serialize"해야합니까?

웹 서버가 요청을 직렬 방식으로 수신합니까? 그렇다면 우선 순위 큐에 삽입하는 것이 아마도 빨라야 할 것입니다.

답변

2

간단히 말해서 대부분의 웹 서버는 스레드 풀에서 스레드를 당기거나 새 스레드를 생성하여 별도의 스레드/프로세스에서 각 요청을 처리하여 들어오는 요청을 병렬로 처리합니다. 대개 동시에 처리 할 수있는 요청 수에 대한 상한이 있습니다 (예 : 스레드 풀의 최대 스레드 수). 해당 제한을 초과하면 보류중인 요청은 다른 요청이 완료 될 때까지 대기열에서 대기합니다. 서버가 요청의 일부 비동기 처리를 수행해야하는 경우 요청을 완료 할 준비가 될 때까지 (예 : ASP.NET의 IHttpAsyncHandler) 스레드를 스레드 풀로 반환 할 수 있습니다.

서버는 실제로 포트 80에서 요청을 되돌려 보내지 않습니다. 클라이언트는 특정 연결에 대해 자체 포트를 갖습니다.

+0

epoll은 ASP.NET에서 IHttpAsyncHandler와 동일한 Linux일까요? – SundayMonday

+0

@MrMusic Linux 네트워킹에 대한 전문가는 아니지만 epoll은 Windows의 I/O 완료 포트와 더 유사하다고 생각합니다. Apache 나 IIS와 같은 웹 서버는 epoll 또는 I/O 완료 포트를 사용하여 네트워크 소켓에서 비동기 적으로 데이터를 읽을 수 있습니다. 일반적으로 웹 서버 내에서 실행되는 응용 프로그램 모델 (예 : Apache의 PHP 모듈 또는 IIS의 ASP.NET)이 있습니다. 일부 응용 프로그램 모델에서는 서버 요청을 처리하는 동안 스레드를 스레드 풀로 "해제"할 수 있습니다. Node.js는 모든 것을 비동기 적으로 처리하려고 시도하는 서버의 예입니다. –

2

저는 새로운 것도 있지만 네트워크 통신에 대해 약간 이해하고 있습니다.

제대로 작동하면 동시에 한 번에 하나씩 여러 요청에 응답하지 않습니다.

정보가 어떤 포트인지에 관계없이 네트워크를 통해 전송되면 정보가 패킷으로 전송됩니다. 해당 패킷에서 귀하의 경우 요청하는 포트 번호와 사용하려는 포트 번호 및 기타 필요한 정보를 정의하는 헤더입니다. 헤더가 데이터 뒤에옵니다. 패킷의 데이터 크기는 설정 (예 : 컴퓨터, 라우터/스위치 등)에 따라 다릅니다. 마지막으로 바닥 글은 특정 패킷에 대한 마지막 패킷인지 또는 그렇지 않은 경우 다음 패킷에서 찾을 것인지에 대한 지침을 포함합니다.

귀하의 질문에 대한 답변을 얻고 몇 가지 질문을 던지시기 바랍니다.

+0

나는 케일럽의 대답을 좋아한다. 웹 서버 기능에 대한 더 많은 정보. 미안 당신이 찾고 있었던 것이 아니 었으면. –