개발 환경은 Delphi6 + Indy9을 사용하여
Socket서버를 구현중에 있습니다.
내용은 특정 전문을 받아, 그 전문의 요청에 따른 데이터를 채워 다시 수신하는 형태의 통신인데,
문제가 좀 생겼습니다.
보통 소켓서버쪽에서는 클라이언트의 Connect요청에 의해 하나의 쓰레드를 생성하고, Disconnect될때,
이 쓰레드가 사라지는걸로 알고 있습니다.
근데 고객의 서버가 호스트인지라, TCP/IP통신을 마치 X.25와 같은 형태의 통신을 구현해 달라고 했는데,
내용을 보니, 동일한 클라이언트에서 항상 Connection을 유지하고, 수신데이터를 동일한 세션에서 보낸다고 하던군요. 그것도 상당양의 전문을요.
근데 가만생각해보니, 이게 문제가, 만약 하나의 Connection으로 계속 전문을 서버쪽에서 수신하게 되면,
직렬처리야 가능하겠지만, 병열처리는 불가능할거 같은 생각이 들더군요.
보통 서버쪽에서 각 클라이언트에 따른 TIdPeerThread를 생성해주고, 처리중 다른 클라이언트가 요청을 하더라도, 또 다시 TIdPeerThread를 생성해줘서 병렬 처리가 가능한 걸로 알고 있는데,
위에 같은 경우 TIdPeerThread는 하나만 생성될 것이고, 그렇게되면 건당 처리속도가 2초라고 할때
최대 처리 속도는 2초*전문수신수 만큼이 될거란 계산이 나오는데요. 즉 맨 마지막에 수신을 요청한 전문은
앞에 처리때문에 수초 혹은 수분간 기다려야하는 상황이 발생하는 문제가 발생 할 수 도 있겠단 생각 들더군요.
궁금한건, 제가 위에서 생각한 형태로 정말 저렇게 시간이 걸리는건지,
만약 그렇다면, 위와 같은 전문을 병열로 구현하기 위해선 어떠한 작업이 필요한지 입니다.
정말 골치아프네요. ㅠ.ㅠ
많은 분들의 고견을 기다리겠습니다. 감사합니다.
병렬처리라... 걱정하실 필요가 없습니다. 서버와 여러 클라이언트들과의 커넥션이 하나라는것은 존재할 수가 없습니다.
단 X.25는 TCP/IP와 달리 연결되면 네트워크상의 경로가 서킷망처럼 고정된다는 점이 다를뿐입니다.