bind or connect

bind vs connect in zmq

ZeroMQ는 각각의 접속연결에 대해서 큐를 생성한다. 예를 들어 소켓이 3개의 피어 소켓과 연결된다면 3개의 큐가 만들어진다.

bind를 사용하면 각각의 피어들이 이 소켓에 connect할 수 있게 허용한다. 따라서 앞으로 몇 개의 소켓이 피어로 접속될지 알 수 없고 미리 큐를 만들어놓지 못한다. 대신 각각의 큐들은 각각의 피어 소켓이 접속해 올 때 만들어진다.

connect를 사용하면 ZeroMQ는 최소한 한 개의 싱글피어가 연결 반대쪽에 있다는 것을 알게되므로 즉시 큐를 생성할 수 있다. 결과적으로 피어가 없는 소켓으로 메시지를 보낼 때는 메시지를 보관할 큐가 없다고 보면 된다.

그렇다면 언제 bind를 쓰고 언제 connect를 써야 할까?

상대적으로 안정적인 위치에서는 bind를 쓰고 상대적으로 가변적인 위치에서는 connect를 쓴다. (주로 서버는 bind, 클라이언트를 connect를 쓴다.)

만약 이러한 판단이 서지 않는다면? 양단의 중간에 새 장치를 하나 만들고, 이 장치의 양단을 bind로 연결하고 양쪽을 connect로 연결하면 된다.