OpenTNL API를 이용하여 메모리 데이터 전송하기
네트워크 API인 OpenTNL로 테스트를 진행했다. RFC(Remote Function Call) 방식이 특징이라, 원격지의 기능을 쉽게 동작시킬 수 있다. 예술적인 매크로를 감상할 수 있다.
이 라이브러리를 이용하여, 원격지로 메모리의 데이터를 보내기 위한 테스트를 진행하려고 했다. 일단 OpenTNL 샘플을 컴파일시켰다.
샘플을 동작시켜본 후, 이제 약 60K~130K에 이르는 메모리 데이터를 보내려고 했다. TCP 방식으로 직접 전송하는 방법을 찾지 못하여, RFC를 연속으로 사용했다. 그래서인지 전송이 엄청나게 느리다... JPG로 압축해서 전송60K 보내는데 거의 5초는 걸리는 것 같다. 게다가 loopback인데 말이다. 쩝, 꽤 유명한 API인데도 도큐먼트와 튜토리얼이 부족하다. 이미지 처리는 일전에 언급했던 CxImage를 사용한다. http://blog.paran.com/ehei/12323120
1147781251_testSendCapture.rar
[설명: 한 프로그램을 두개 실행시킨 후, 각각 클라이언트/서버 역할을 맡긴다. 클라이언트에서 Send Screen을 실행하면 캡처한 화면을 서버로 보내 표시시킨다]
게다가, 이 코드는 상업적 사용에 제한이 있다. 이게 문제가 되는 것은 다른 사람에게 요청을 받았기 때문이다. 원격 모니터링 프로그램으로 유명한 WinVNC를 간단히 구현해달라는 것. 사실 어려울 것은 없지만, 문제는 시간이다. 그러나 네트워크에 대한 부족한 이해가 오히려 작업을 지체시켰다. 이번에 얻은 교훈. 어쨌든 이 API 사용을 포기하고 HawkNL을 검토했다. 다음 포스트에 계속...
※ OpenTNL은 메모리 관리를 자동으로 수행한다. 즉, 할당을 한 후에도 프로그래머가 제거를 할 의무(권리 또한)가 없다. 이는 멀티스레딩으로 수행되는 만큼, 프로그래머가 제거할 시점을 찾기 어렵고 실수하기도 쉽기 때문이다. 다음 코드를 보자.
TNL::ByteBufferPtr byteBuffer = new ByteBuffer;
이제 delete를 할 필요가 없다. TNL::Object 클래스를 보면 이 과정을 살펴볼 수 있다. 레퍼런스 카운트가 0이 되면 자신을 삭제한다. 멀티쓰레딩 프로그래밍에서는 매우 유용한 테크닉이다.