2013-04-15 2 views
2

현재 웹 서버가있는 프로젝트에서 작업하고 있습니다. 각 요청에 대해 다른 서버에 여러 요청을 보내고 응답을 얻고 결과를 원래 클라이언트로 되돌려 보낼 수 있도록 능력을 추가해야합니다. 이 서버는 높은 처리량을 제공하므로 많은 소켓에서 많은 요청을 보내는 새 스레드/소켓 설정 속도뿐만 아니라 소켓 수에 대해서도 걱정이되었습니다. 그래서 저는 각 클라이언트에게 열려있는 단일 (또는 몇 개의 연결)이 문제를 해결하는 데 도움이된다고 생각하기 시작했습니다. 나는 지속적인 연결과 ASIO가 어떻게 작동 하는지를 확신하지 못했습니다. 내가 가지고있는 몇 가지 질문 :Asio 연결 재사용

- 어떻게 ASIO tcp 소켓을 사용하여 활성 상태로 유지할 수 있습니까?

- 동일한 소켓을 통해 여러 개의 동시 요청을 보낼 수 있습니까? 나는 결과의 순서에 관한 문제에 봉착 할 것인가? (각 결과는 ID를 가져야한다. 따라서 순서가 틀린 순서로 보내지는 순서를 의미하는 것이 아니라 응답이 하나 이상의 패킷 인 경우 더 많은 패킷 순서, 나는 패킷의 순서에 문제가있을 것이다).

모든 요청은 중요하다면 HTTP GET/POST 요청입니다.

이 주제의 모든 정보는 높이 평가됩니다. 감사.

답변

2

TCP 소켓은 데이터 스트림의 역할을하며, 한쪽 끝에 쓰는 데이터는 다른 쪽 끝과 동일한 순서로 수신됩니다. 프로토콜이 처리 할 수있는 경우 동일한 소켓을 통해 여러 요청을 보낼 수 있습니다.

동시 요청을 언급 했으므로 서로 다른 두 요청의 쓰기 호출을 인터리브하지 않도록주의해야합니다. 각 결과가 원자 적으로 작성되도록하려면 여러 요청에 대해 소켓을 사용할 때 아무런 문제가 없습니다 (응답 대기열로 처리 할 수 ​​있습니다).

표준 소켓 유지 활성을 설정할 수 있습니다 here.

+0

감사합니다. 필자는 대기 호출 시스템을 사용하여 쓰기 호출을 사용할 계획 이었으므로이 기능이 제대로 작동해야한다고 생각합니다. – Eumcoz