2012-07-05 3 views
0

저는 Poco 프레임 워크를 처음 접했고 C++과 잘 맞지 않지만 배우고 있습니다. Windows에서 서버 클라이언트 기반 응용 프로그램을 만들어야합니다. 내가 지금 가지고있는 문제는 클라이언트에게 몇 분씩 반복적으로 데이터를 보내야한다는 것입니다. 내가 서버와 활성 tcp 연결을 가진 클라이언트에 대해이 작업을 수행해야합니다. 어떻게 이벤트를 만들 수 있는지, 또는 스레드에서 트리거 된 모든 것을 생성하고 클라이언트에 데이터를 보내기 위해 모든 활성 스레드를 시작하는지 모르겠습니다. 첫 번째 아이디어는 TCPServerDispatcher 클래스를 다시 작성하거나 확장해야한다는 것입니다. 그리고 어떻게 ThreadPool에서 활성 스레드를 식별 할 수 있는지 모르겠습니다.TCPServer 연결된 스레드에서 POCO raise 이벤트

아이디어 나 제안 사항 또는 자습서가 있습니까? 나는 그것을하는 방법을 알아낼 수 없다 ...

누군가가 나에게 아이디어 또는 일부 코드 예제를 줄 수 있기를 바랍니다. 고맙습니다.

답변

0

이 서버 <> 클라이언트 스레드가 스스로 데이터를 얻을 수 없습니까? 각 스레드의 read()에 60 초의 시간 제한을 추가하고 데이터를 전송하는 것이 매우 쉽습니다. 어쩌면 너무 많은 데이터베이스 연결이 필요합니까?

잠금 기능이없는 개체에 최신 데이터를 넣고 스레드가 잠금 시간을 지정하여 최신 데이터를 잠그고 쓰기 및 잠금 해제 할 수 있습니까? 이러한 솔루션은 잘못 처리 된 클라이언트가 잠금을 유지하면서 해당 서버 스레드를 차단하게하는 것을 방지하기 위해 실제로 쓰기 타임 아웃을 가져야합니다. 너무 크지 않다면, 서버 <> 클라이언트 스레드가 보낼 데이터의 복사본을 만들 수 있다고 생각합니다. 그러나 나는 TBH라는 훌륭한 팬이 아닙니다.

서버에 새로운 데이터를 사용할 수있는 클라이언트 스레드를 알리는 데 더 복잡한 방법이 있습니다. 새로운 데이터를 사용할 수있는 각 스레드에 신호를 보내고 즉시 '즉시'처리하도록 할 수 있습니다. 이것은 대개 하나의 신호를 기다리는 서버 <> 클라이언트 스레드를 의미합니다. 일반적으로 대기 시간이 낮은, 더 복잡한 솔루션 :(

RGDS, 마틴

+0

글쎄, 데이터베이스 연결 수의 증가가 문제이다. 나는 가능한 한 덜 자주로 확인해야합니다. – user583012