2016-10-04 3 views
-1

소켓에서 클라이언트의 여러 요청을 수신하고 스레드에서 처리하는 서버 역할을합니다.TCP 연결 당 요청 수가 최대 인 경우

TCP 수준에서 매개 변수를 설정하여 연결에서 동시에 처리 할 수있는 최대 요청 수를 설정해야합니까? 요청을 처리하는 속도가 느린 경우 때문에 내 서버 측에서, 내가 다른 요청이 대기하고 있는지 관찰이 오래 걸리는 경우 친절하게 나에게

+0

최대 값은 없으며 설정할 수 없으며 가능한 경우 문제를 해결할 수 없습니다. 연결 당 요청은 순차적이며 문제는 동시성 또는 오히려 부족합니다. 별도의 스레드에서 각 클라이언트 소켓을 처리해야합니다. – EJP

+0

멀티 스레드 방식으로 요청을 처리하고 있습니다. 요청은 지속적 TCP 연결에서 순차적으로 계속 들어오고 있습니까? 다음 요청이 나에게 전송 될 때까지 응답을 기다리는 지 또는 이전 요청에 대한 응답을 보낸지 날씨와 관련이 없습니다. – jan

+0

이미 [연결 또는 요청을 멀티 스레드 방식으로 처리하고있는 경우] 귀하의 질문이 실제로 무엇인지 파악하는 것이 불가능하지는 않더라도 어렵습니다. 클라이언트가 기존 연결을 통해 작동하는 방식은 연결 당 최대 요청 수를 설정하는 것과 절대 관계가 없습니다. – EJP

답변

1

을 안내

을 (클라이언트 요청이 전송하지만 난 늦게 받게되었습니다 말한다) 작업을 수행 할 시간이고 여러 연결을 동시에 처리하려면 작업 방법을 변경해야합니다.

긴 요청을 처리하는 동안 많은 CPU를 사용하는 경우 여러 스레드가 필요합니다. 이것은 여러 개의 코어를 사용할 수 있다고 가정 할 때 실제로 CPU 시간/초를 더 얻는 유일한 방법입니다.

파일 IO와 같은 작업을 기다리는 경우 비동기 처리를 사용하여 단일 스레드에서 요청을 처리 할 수 ​​있지만 한 번에 작은 조각 만 처리하면됩니다.

최대 TCP 연결 수를 설정해도 더 많은 프로세스를 더 빨리 처리하는 데 도움이되지 않습니다. 그것은 단지 연결을 거부하고 선착순으로 처신하는 것을 허용하지 않습니다. 특정 클라이언트가 통과했는지 여부는 무작위입니다.

+0

현재 다중 스레드에서만 요청을 처리하고 있습니다.하지만 여전히 DB 사용률이 높을 때마다 대기열을 볼 수 있습니다. 일반적으로 요청을 처리하는 데 1 초가 걸리지 만 문제가 발생하지는 않습니다.하지만 처리가 3- 4 명의 고객이 시간에 응답을받지 못한다고 말합니다. 시간 초과는 25 초이지만 4 초 안에 처리하고 보내고 있습니다. 요청은 지금까지 거짓말을하고 있습니다. 대기 중입니까? – jan

+0

데이터베이스가 너무 느린 경우 속도를 높여야합니다. 고객이 시간 초과 또는 거부 된 연결을 원하는지 여부는별로 중요하지 않습니다. 데이터베이스를 포화 상태로 만들면 많은 연결 수락을 원하지 않을 수도 있지만 해결 방법은 여러 가지가 있습니다. 그러나 TCP 연결을 조정하는 것은 아마도 잘못된 접근 일 것입니다. – xaxxon