안녕하세요.
idTCPServer 인데요. h/w와 통신을 하고 있습니다. 그런데 네트워크 환경이 바뀐건지.
어느순간부터 커넥션이 누적되고 있습니다.
하드웨어에서 단순 정보를 서버에 업하고 커넥션을 끊는 환경입니다.
listenQueue 는 3000
ReuseSocket 는 옵션을 모두 바꿔봐도 같은 상황입니다.
TerminateWaitTime 5000 dlqslek.
UseNagle = False;
구조는 다음과 같습니다.
Execute(AContext: TIdContext);
AContext.Connection.IOHandler.ReadTimeout := 2000;
AContext.Connection.IOHandler.RecvBufferSize := 4096;
with AContext.Connection.IOHandler do
begin
CheckForDataOnSource(10);
if not InputBufferIsEmpty then
begin
if not AContext.Connection.Connected then
exit;
RxBufStr := InputBuffer.Extract;
RxBufStr := Trim(RxBufStr);
//데이터를 처리.
// 그리고 처리한 데이터를 아래와 같이 응답을 보냅니다.
AContext.Connection.IOHandler.WriteDirect(TBytes(TxBufStr),
// 여기서 커넥션을 끊지않고. 종료합니다.
// 왜냐면. 길게 주고받고 하는경우가 있습니다.
// Disconect 해주면 되긴 하는데.. 어짜피 h/w에서 커넥션을 끊기 때문에
// 또 어떤 데이터를 더 보낼지 모르기 때문에 그냥 커넥션이 끊길때까지 사용을 했습니다.
// 그런데 어느순간 부터 누적이 됩니다.
end;
질문 1. aContext의 커넥션이 일정시간 후 5초이후에 자동으로 끊기는 옵션이 있는지요?
2. Reuse 때문에 계속 커넥션이 살아 있는 것인지요?
3. 커넥션을 검사하여 종료된 연결을 끊어버리는 방법이 있는지요?
일단 커넥션에 쓰레드 타임이벤트를 달아서 접속 시작후 끊기는 했는데요. ?
인디에 구조가 궁금하네요.