2009-08-01 4 views
1

이것은 초보자 용 질문 일 수 있습니다. 그러나 소켓에 데이터를 열고 쓰면 소켓이 범위를 벗어나서 다른 프로그램에서 데이터를 읽도록 서브 루틴을 종료하십시오. 나중에 원래의 선언이 범위를 벗어날 때 데이터가 그대로 유지되거나 죽게됩니까?소켓 및 데이터 지속성

감사합니다,

N.

추가 정보 : 나는 의사 소통을 할 수있는 인터페이스로 파일을 사용하여이 개 프로그램을 다시 작성하려고

. 일반적인 흐름은 다음과 같습니다.

주 프로세스 : 데이터 쓰기.

메인 프로세스 : 클러스터의 다른 노드 위에 스폰 차 과정 (들)은

메인 프로세스 : 보조 프로세스가 완료 될 때까지 기다립니다.

중등 과정 : (주 쓴) 데이터 읽기

차 프로세스 : 데이터

차 프로세스를 쓰기 : 출구

메인 프로세스 : 데이터를 읽습니다.

그래서 나는 기본적으로 소켓 파일의 쓰기/읽기/쓰기/읽기를 교체하려면 (훨씬 더 빨리해야합니다!) TCP 소켓의 경우

답변

5

가 데이터를 전송하기 전에 열린 양방향 연결이 필요하므로 당신이받는 편이 없다면 그 질문은 무의미합니다.

UDP의 경우 데이터를 전송할 때 소켓에서 수신 대기하는 사람이 없으면 데이터가 네트워크 드라이버에서 계속 이동하기에 충분한 속도로 수신 대기중인 프로그램을 열지 않는 한 아무도 수신하지 않습니다 . 그러나 드라이버 안의 'localhost loopback'이 데이터 전송에 몇 마이크로 초 이상 걸리지 않아야하기 때문에 그다지 중요하지 않습니다.

P. 정확한 상황을보다 자세하게 설명하면 아마도 더 적합한 대답을 얻을 수 있습니다. 무엇을 성취하려고합니까?


귀하의 "추가 정보"에 관해. 소켓으로 파일을 간단히 대체하고 현재 구성표를 유지하면 소켓에서이 작업을 수행 할 수 없습니다. 그러나 먼저 하위 프로세스를 생성 한 다음 소켓을 통해 데이터를 전송하여 스키마를 변경하려고 할 수 있습니다. 아이들이 끝나면 소켓을 통해 부모에게 대답을하고 종료합니다.

여기에는 비효율적 인 점이 있습니다. 멀티 캐스팅을 사용하지 않는 한 동일한 데이터를 각 어린이에게 개별적으로 보내야하기 때문입니다.

소켓이 파일보다 훨씬 빠르지는 모르겠지만 더 복잡한 구성에서는 소켓이 더 안전 할 것이며 파일 시스템을 공유하지 않는 컴퓨터간에도 배포 할 수 있습니다.

3

원시 소켓을 사용할 때 데이터를 쓰는 시점에 다른 끝점 (연결됨)이 없으면 데이터가 손실됩니다.처음에 다른 끝점에 연결하지 않고 실제로 데이터를 쓸 수있는 유일한 방법은 UDP를 사용하는 것입니다.이 경우 일치하는 끝 점이없는 경우 데이터가 수신 시스템에서 플러시됩니다.

비동기 전송을 원할 경우 지연 전달을 허용하는 메시지 전달 시스템을 사용해야합니다. 이 경우 메시지의 수신자는 실제로 클라이언트가 요청할 때까지 메시지를 저장하는 시스템 프로세스입니다. 실제 통신은 한 시스템의 클라이언트와 다른 시스템의 시스템 프로세스 사이에서 이루어지며 다른 시스템의 클라이언트는 로컬에서 데이터를 얻습니다. http://en.wikipedia.org/wiki/Message_passing에서 메시지 전달 및 그 변종에 대해 자세히 읽을 수 있습니다.