2009-11-17 2 views
17

로컬 IPC (win-api 사용), 유효성 검사, 리소스 대기 또는 다른 방법을 사용하여 소켓을 통해 명명 된 파이프를 선호하는 이유가 있습니까? 둘 다 매우 비슷하게 동작하므로 (어쨌든 유사한 인터페이스로 추상화 될 가능성이 높습니다.), 어쨌든 네트워크 용도로 소켓을 이미 사용하고있는 응용 프로그램에서?소켓과 Windows의 로컬 IPC에 대한 명명 된 파이프?

적어도 주소 지정 문제 : 파이프의 파일 이름에 대한 소켓의 포트 번호를 지정할 수 있습니다. 또한 차단 된 응용 프로그램은 여전히 ​​소켓을 통해 통신 할 수 있지만 명명 된 파이프 (AFAIK)는 방화벽 (차단/차단 해제 대화 상자)에 경고하지 않습니다. 다른 점은 고려해야 할 사항입니까?

소켓을 사용하는 경우 로컬에서 소켓을 사용할 때 권장되는 모든 winsock 설정/플래그가 있습니까?

답변

15

일부 미묘한 차이 : 당신이 작동하는 어댑터가없는 경우

소켓이 지역의 IPC에 대해 작동하지 않습니다. 작동하는 어댑터가없는 PC는 얼마나 흔한가요? 누군가 네트워크 또는 전원 공급 장치에 연결되지 않은 랩톱의 고객에게 소프트웨어를 보여 주려고 했으므로 (운영 체제가 전원을 절약하기 위해 네트워크 카드를 사용할 수 없게 됨) 무선 어댑터를 사용할 수 없게되었습니다. 랩톱 사용자는 무선을 사용하지 않았습니다. 루프백 어댑터를 설치하면이 문제를 해결할 수 있지만 이상적인 것은 아닙니다.

방화벽 소프트웨어로 인해 TCP/IP 연결을 설정하는 데 문제가 발생할 수 있습니다. 그것은 로컬 IPC에 문제가되지 않겠지 만, 나는 확신하지 못합니다. Named pipes can have firewalls too.

명명 된 파이프를 만들거나 명명 된 파이프의 새 인스턴스를 만드는 데 필요한 권한 때문에 문제가 발생할 수 있습니다. 예를 들어 동일한 이름의 파이프를 사용하여 여러 개의 서버를 실행 중이었지만 (테스트는이를위한 것이었지만 테스트를위한 것이 었습니다) 파이프를 만드는 첫 번째 서버가 관리자 모드에서 실행 중이기 때문에 CreateNamedPipe에서 실패했습니다. Visual Studio는 관리자 모드) 나머지는 정상적인 UAC 수준의 명령 줄에서 시작되었습니다.

루벤스가 언급 한 기사는 대부분 네트워크를 통한 IPC에 관한 것이지만 "로컬 명명 된 파이프가 커널 모드에서 실행되며 매우 빠릅니다"라는 요점을 말합니다.

+7

Windows PC에는 항상 가상 루프백 인터페이스가 설치되어 있습니다. 윈도우 소켓을 사용하기 위해 PC에 네트워크 어댑터 나 드라이버가있을 필요는 없습니다. IP 주소 127.0.0.1을 사용하여 로컬 프로세스를 처리하십시오. – phord

4

고려할만한 또 다른 솔루션은 명명 된 공유 메모리 영역입니다. 흐름 제어 프로토콜을 직접 설정해야하기 때문에 약간의 작업이 필요하지만 속도가 가장 중요한 과거에 이것을 성공적으로 사용했습니다.

관련 문제