나는 클라이언트의 요청에 따라 하나의 프로세스 (자식)를 생성하는 (Linux에서 fork()에 의해) 다중 프로세스 TCPServer를 가지고 있고 다른 한편으로는 다른 연결의 요청을 듣고있다. 그래서 클라이언트와 서버 사이에 1 대 1 매핑이 있습니다. 하나의 클라이언트가 다운 된 경우 같은 하위 서버 프로세스에 다시 연결할 수 있습니까? 다른 말로하면 실패한 이전의 연결을 복원하거나 다시 연결하려는 시도를 새 연결로 만들 수 있습니다 (그런 다음 새 하위 서버 프로세스)? 고마워요 ...동일한 TCP 연결을 재개
답변
내부 세션 관련 세부 정보 (forkee)에 대한 일부 지식이없는 경우 (forkee의) 내부 연결과 관련된 세부 정보가 적절하면 외부 연결이 다시 연결되는지 확인해야합니다. 어떤 로컬 연결 끝점.
하지만 애플리케이션에서 작동하는 방식을 변경할 수 있습니다. Oracle SQL * Net은 플랫폼에 따라 일부 플랫폼에서이 작업을 수행합니다.
TCPServer에 처음으로 연결하면 포크 and then opens up a new listening socket
이 발생하여 새 청취 소켓 &에 연결하기위한 리디렉션 지침이 다시 전송되어 다른 사람이 원래 커넥터에 연결되어 가장하지 못하게합니다. 그런 다음 클라이언트는 새 소켓에 연결하고이 소켓을 사용하여 연결 해제 전에 재 연결을 수행합니다.
.NET 플랫폼에서 이와 비슷한 작업을 수행했습니다. 모든 연결에 대해 고유 한 것이 있다면 (예 : 연결 장치의 IMEI가 가능합니다.) ProcessID와 IMEI의 조합으로 전역 2 차원 배열 변수가 있어야합니다. 따라서 장치가 분리 된 후 장치가 다시 연결되면이 배열에서이 IMEI 만 검색하면이 장치에 대한 프로세스가 제공됩니다. 이 전역 변수에 매우주의해야합니다.
편집 : 몇 가지 고유 한 식별자의 예를 들었습니다. 제 경우에는 그것은 장치의 IMEI였습니다. 당신의 경우에는 그게 당신이 알고있는 다른 것이 될 수 있습니다 그것은 독특합니다. 연결을 끊는 장치에 큰 문제가 있었기 때문에이 작업을 수행해야했습니다. 모든 새로운 장치가 새로운 연결 이었기 때문에 나중에 매우 큰 CPU 사용으로 끝났습니다.
ok 나는 이해한다. 그래서 나는 새로운 연결이 도착할 때마다 이전에 연결된 클라이언트에서 온 것이거나 새로운 클라이언트 인 경우 전에 제어해야한다. 첫 번째 경우 이전 소켓 서버의 자식 프로세스에 소켓 설명자를 전달해야합니까? 발생하지 않은 것처럼 연결을 복원하는 것으로 충분합니까? – marco
이전 프로세스로 넘어 가지 않고 오래된 프로세스를 닫습니다. 새 프로세스를 이미 받아 들인 경우 (내 경우에는 이와 같았습니다). 따라서 새로운 연결이있을 때 (새 프로세스에서 허용됨) 배열에서 ID를 검색합니다. ID가 있으면 그 프로세스를 죽이고 새로운 ID를 배열 –
@Stefan과 함께 추가하십시오. 답변 중 하나를 편집하여 두 질문을 하나로 결합하고 다른 질문을 삭제하는 것이 좋습니다. 그것은 당신의 대답을 철저히 따라갈 수있게 해줍니다. – Jeff
- 1. MantaRay가 동일한 포트에서 3 개의 TCP 연결을 엽니 다.
- 2. 어떻게 동일한 포트에 TCP 연결을 다시 할 수 있습니까?
- 3. 닫기 TCP 연결을 엽니 다.
- 4. 누가이 TCP 연결을 망 쳤니?
- 5. PHP에서 TCP 연결을 여는 방법
- 6. TCP/IP 연결을 통한 스트리밍
- 7. 어떤 경우에 TCP 연결을 닫아야합니까?
- 8. 서버에서 TCP 연결을 수락하면 포트가 변경됩니까?
- 9. 동일한 TCP 소켓에 다중 스레드
- 10. TCP 연결을 설정하는 데 필요한 TCP 세그먼트 수는 얼마입니까?
- 11. 여러 개의/여러 TCP 연결을 관리하십시오.
- 12. 포트 별 TCP 연결을 종료하는 방법은 무엇입니까?
- 13. 다중 클라이언트 연결을 처리하는 Perl TCP 서버
- 14. tcp 연결을 통해 큰 파일 보내기
- 15. TCP/IP가 나가는 연결을 설정하지 못했습니다.
- 16. Erlang은 들어오는 TCP 연결을 동적으로 수락합니다.
- 17. 원본 IP로 TCP 연결을 안전하게 인증하고 있습니까?
- 18. 영구 TCP 연결을 만들고 시뮬레이트하는 방법은 무엇입니까?
- 19. boost :: asio가 TCP 연결을 정상적으로 종료하지 못합니다.
- 20. 자바 : URLConnection이 완료된 TCP 연결을 처리하는 방법?
- 21. Socket.SendAsync가 죽은 TCP 연결을 감지하지 못합니다.
- 22. TCP 연결을 예외없이 정상적으로 닫으려면 어떻게해야합니까?
- 23. IOS와 창간에 Tcp 연결을 설정하는 방법은 무엇입니까?
- 24. TCP 연결을 통해 형식의 메시지를 보내는
- 25. java에서 TCP 연결을 통해 주소에 액세스
- 26. TCP 연결을 종료하기 위해 패킷을 삽입하십시오.
- 27. TCP 연결을 다시 사용할 수 있습니까?
- 28. 스테이션이 세 개의 TCP 연결을 동시에 유지 관리하는 경우 세 개의 연결에 동일한 TCP 포트를 사용할 수 있습니까?
- 29. C#에서 여러 개의 TCP 연결을 만들고 데이터를 기다립니다.
- 30. TCP 연결의 기초
당신은 빠른 응답을위한 사람들입니다 ... 제 코드는 C++이며이 언어는 필수입니다 ... 그래서이 상황에서 해결책을 찾아야합니다 ... @ stefan IMEI는 무엇을 의미합니까? 그것은 연결의 univoque 식별자입니다 ..하지만 당신은 내게 더 자세한 정보를 줄 수 있습니까? – marco