2013-10-24 3 views
4

clrzmq (3.0.0 rc1) Socket.ReceiveReady 이벤트를 이해하는 데 문제가 있습니다. 관용적 C# 코드에서 나는 호출 될 이벤트 핸들러를 등록하고 앉아서 핸들러를 기다리는 기대 :clrzmq Socket.ReceiveReady 이벤트가 발생하지 않았습니다.

socket.ReceiveReady += (o, e) => Console.WriteLine ("Success!"); 

그러나이 이벤트가 발생하지 않습니다하지 않는 한 내가 적극적으로 여론 조사 :

var poller = new Poller(new[] {socket}); 
while (true) { 
    poller.Poll(); 
} 

이것은 완전히 반 직관적입니다. 폴링 (즉, 끌어 오기 기반 모델 사용) 또는 이벤트 수신 (예 : 밀어 넣기 기반 모델 사용) 중 하나를 수행해야합니다.

정말이 방법이 맞나요? 아니면 더 간단한 것을 놓치고 있습니까?

답변

4

네, 올바른 접근 방법 인 것 같습니다. NetMQ에서 이러한 이벤트는 NetMQSocket.Poll()Poller.Start()에 의해서만 호출됩니다. 소켓에서 메시지를 처리하기위한 전용 스레드가 있어야하기 때문에 폴링이 필요합니다.

관련 문제