TCP 클라이언트 및 서버 응용 프로그램을 작성하고 있습니다. 서버가 요청을 받고 별도의 스레드에서 클라이언트 당 소켓을 엽니 다. 클라이언트는 이벤트에 등록 할 수 있으며 서버는 이벤트가 발생하면 클라이언트에 이벤트를 보내야합니다. 제 질문은, 소켓을 저장하고 요청의 동일한 열린 소켓에 이벤트를 보내는 것이 좋습니다. 즉, 메시지가 전송되지 않으면 소켓이 종료되고 얼마 후에 종료됩니까? keepAlives가 필요합니까? 클라이언트 측이 여전히 연결되어있는 동안 연결이 끊어지는 다른 시나리오가 있습니까? 각 이벤트 (서버에서 보낸 각 메시지)에 대해 새 소켓을 만드는 데 필요한 오버 헤드는 무엇입니까?TCP 서버 및 클라이언트 C# 모범 사례
1
A
답변
0
연결을 만들 수 있으며 TCP 연결을 위해 서버와 클라이언트간에 살아있는 패킷을 사용할 필요가 없습니다. 연결이 끊어지면 양면이 나타납니다.
제대로 이해하면 패킷 수신 기능에 연결이 끊어 졌는지 쉽게 확인할 수 있습니다. 연결이 끊어진 경우 다시 연결하는 기능 만 가져 오면됩니다.
그러나 서버가 새 "이벤트"를 게시하고 그 후에 다시 연결하기 전에 연결이 끊어지면 클라이언트는이 패킷을 수신 할 수 없습니다.
이 문제를 통해 전달하는 경우,이 시도 :
- 이 목록에서 이벤트를 저장합니다.
- 모든 이벤트에 timestamp 속성을 추가하십시오.
- 클라이언트는받은 마지막 이벤트의 타임 스탬프 값을 기억할 수 있어야합니다.
- 다시 연결 한 후 누락 된 이벤트에 대한 마지막 이벤트의 시간 소인 값을 포함하는 요청을 클라이언트가 보내도록하십시오.
- 서버가이 요청을 받으면 요청 패킷의 타임 스탬프가 LastTimeStamp 인수보다 큰 이벤트를 보내도록합니다.
나는 그것을 유지하는 것이 좋습니다. 나는 당신이 TCP 연결을 유지한다면, 결국 더 빨라질 것이라는 기사를 읽었던 것을 기억한다. 소켓을 통해 끊임없이 무언가를 보내서 계속 유지하는지 확인하십시오. –