|
비동기 소캣으로 사용하고 싶으시다고 하셨는데 (저는 5.0)
쓰레드를 사용하고 싶으시다면 제가 하는 방법은. 스레드를 만들어서 연결된 소캣의 포인터를 넘겨주고 계속해서 소캣을 버퍼을 체크하는 로직을 돌리면서 사용하는 방법이 있구요
이건 간단히 쓰레드 만들어 돌리는 방법과 그리고 소캣에 포함된(TClientSocket->Socket->?)뭔가 있을꺼에요 이것만 이용할줄 알면 금세 만들어 버리구요
그리고 비동기는 이벤트를 발생해 주거든요 클라이언트의 소캣의 프로퍼티를 보면..비동기로 설정하는 부분이 있을꺼에요..
그리고 나서 이벤트들을 받으면..받을수 있을껍니다.
그런데..제가 사용해 본 결과(저의 실수 일수도 있지만) 클라이언트에서 처리하는 속도보다 소캣의 버퍼에 쌓이는 속도가 더 빠그면..어느순간.. 이벤트가 발생하지 않는 결과가 생기더군요..
글케 되면..와도 왔다는 이벤트가 발생하지 않는거죠 프로그램이 가만히 멍하고 쳐다봐야 되는 거죠
왠지는 모르지만...그래서 저도 항상..쓰레드로 일부러 돌려 주걸랑요..버퍼를 체크하고 버퍼가 한 8kbye인가..지금은 정확히 생각은 안나는데. 그 순간을 다 채우지 않도록 체크하는 로직이 필요 하지만..간단한 거라면. 그것까지는 생각지 않으셔도 될듯 싶네요...하여간..글케 해줌..안죽더군요..
아마 어느정도의 데이타라면..처리 해줄수 있을꺼에요...
만약..많은 양이라면...
전..전에..한..20만개의 패킷을 처리하는데..
서버쪽에서는 죽어라고..패킷을 보내고...
클라이언트에서는.. 죽어라고 처리해야 되죠...
그때는 죽더군요..보내는 양보도 처리하는 속도가 떨어지다 보니깐..
어느정도에서 받다가..죽어 버리더군요..
그래서 저는 쓰레드 두개에 리스트 하나 사용했어요..
하나의 쓰레드는 들어오는 값을 리스트에 계속 쌓아 주공..
하나의 쓰레드는 그 리스트에서 값을 꺼내서 처리해주는 거죠..
그럼..안죽더라구요...속도도..느리긴 하지만..죽지는 않아요..다행이도..^^
그런데..서버하고 클라이언트하고 싱크를 맞추어야 된다면..약간의 문제는 발생할수 있죠..^^
저도 아직은..초짜라서요...하지만..저도 이것땀시..한동안..고생좀 해서..다른 님들은 혹시 같은 고생을 할까 하고 잘은 모르지만 몇자 적어 봅니다.
참고로..혹시 왜 죽는지 아시는분은 리플좀 달아 주세요..^^
|