문제

C#에서는 BeginReceive/EndReceive 메소드로 네트워크 데이터를 수신 할 때 패킷을 수신하자마자 처리하지 말아야 할 이유가 있습니까? 작업 중 일부는 상당히 CPU 집약적 일 수 있습니다. 패킷을 처리 대기열로 밀고 처리하는 일부 구현을 보았 기 때문에 묻습니다. 나에게 이것은 내가 아는 한 비동기 방법이 있기 때문에 중복 된 것 같습니다. 또한 스레드 풀에서 작동합니다.

도움이 되었습니까?

해결책

Mitch가 지적했듯이 완전한 메시지/프레임을 갖기에 충분한 패킷을 수신 할 수 있어야합니다. 그러나 해당 프레임을 즉시 처리하고 다른 BeginReceive를 발행해서는 안되는 이유는 없습니다. 실제로, 당신의 처리에 시간이 걸릴 수 있다고 생각한다면, 당신은 I/O 풀에서 스레드를 차단하기보다는 작업자 스레드-풀에 나눠주는 것이 좋습니다 (콜백이 발사되는 곳).

또한, 적은 수의 연결을 기대하지 않는 한, 각 연결을 처리하기 위해 스레드를 스폰하는 것은 매우 확장 가능한 접근 방식이 아니지만 단순성의 이점이 있습니다.

최근에 네트워크 소켓에서 파이프 라인 데이터 처리에 관한 기사를 썼습니다. 여기.

다른 팁

일반적으로 '처리 가능한'데이터 항목을 갖기 위해 '충분한'패킷을 받아야합니다.

IMO, 작업이 데이터를 수신하는 스레드를 사용하는 것이 좋습니다. 다른 스레드는 실제로 처리하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top