2013-10-22 5 views
1

내가 RabbitMQ에서 채널 및 연결의 개념을 이해하려고 노력했습니다, 나는 높은 수준에서 이해하는 연결 브로커에 TCP socket로 구현 된 실제 연결입니다, 채널은 실제 연결을 사용하여 통신하는 가상 연결. 따라서 채널은 동일한 연결을 통해 다중화됩니다.RabbitMQ 채널 및 연결

그러나 저수준에서는 어떻게 구현 되나요? TCP sockets은 비 차단입니까? 여러 연결을 사용하면 성능이 향상되지 않는 이유는 무엇입니까? 채널이 연결을 사용하면 호출이 직렬화되는 것을 상상해보십시오. 따라서 여러 연결을 사용하여 데이터를 더 빨리 보내고받을 수는 없습니다.

내가 여기에 뭔가를 놓친다는 것을 알고있다. 그래서 나는 약간의 설명을 요구하고있다.

감사합니다.

답변

1

서버 또는 클라이언트가 비 차단 소켓을 사용하는지 여부는 구현 세부 사항입니다. 고성능을 필요로하는 구현은 아마도 비 차단 소켓을 사용합니다. 그러나 예를 들어 RabbitMQ 서버는 일반적인 경량의 Erlang 프로세스 모델을 사용하여 동시성을 실현합니다.

여러 개의 AMQP 연결을 자유롭게 사용할 수 있습니다. 대부분의 경우 하나의 연결과 여러 개의 채널을 사용해야합니다. TCP는 상대적으로 높은 오버 헤드를 가지며 TCP 연결 위에 채널을 다중화하면이 오버 헤드가 줄어 듭니다.