현재 통신 소켓이 TCP/IP 로 되어 있습니다
그런데 특정시간이 되면 많이 느려지는 문제점이 발생하고 있습니다
데이타 손실 없이 이런 문제점을 해결할수 있는 방법이 있을까요?
다른 소켓을 사용해야 하는건지
고수님들의 조언이 필요합니다
제가 이쪽 부분은 잘 몰라서 이곳에 도움을 요청합니다
대부분 속도는 비슷할거구요, 소켓 통신시 과부하걸려 데이타 손실등의 원인을 보면 개발자가 한 함수내에 무리한 코딩으로 발생하는게 많습니다. 받는 부분과 그걸 처리 가공하는걸 분리해 보는 방법으로도 해보세요.
경우에 따라
1. 소켓으로 주고 받는 부분만 별도로 만들어 DB로 데이타를 넣게하는 경우도 있고,
별도 실행하는 프로그그램으로 만들어 DB로 데이타를 넣게하는 경우도 있고,
2. 소켓의 받는 이벤트에서 무리한 소스를 전부 스레드로 빼내는 방법도...
그런데 가장 편한건 소켓 받을때 타이머 하나만 실행시키고 그 타이머가 그 안의 기능을 돌립니다, 전역 변수로 테이타를 누적 시키는 방법.
즉, 데이타는 소켓이 계속 받습니다, 그걸 가공하는 함수는 타이머에 의해 정해짐 시간에 정해진 새수만 가공하죠, 별도로 만등 함수는 하나를 가공 중에 새 데이타가 들어와 타이머가 다시 돌게끔하면 지금 사용중인걸 하고 할건지 멈추고 새로이 가공을 할건지는 코딩하면 방법 등등...
추가 질문에 대하여...
제가보기엔 2가지 사항으로 판단됩니다.
소켓으로 받는 처리가 잘 코딩된 전제하에서요.
이 테스트는 데이타베이스 터리부분을 잠시 막고 메모장이나 다른걸로 보면서 데스트하면 됩니다. 거의 소켓 컴포는 비슷해요.
1. 데이타량이 많아 받는 횟수의의 간격에 비해 데이타베이스 생성/조회등 처리가 늦어 발생하는 경우는 메모리 기반의 데이타베이스가 필요할거구요. 차량관제나 위급처리 등에서 많이 사용합니다.
2. 소켓받는 부분과 데이타베이스 처리는 물리적으로 분리 되었다지만 동시방생시 상호 처리 완료를 기다린다든가 같은 한건당 순서로만 진행한다든가 하는 경우, 소켓을 받는 부분에서의 코딩은 데이타 저장 함수를 직접 호출하는 것이 아니라 메모리상의 누적을 계속하고, 데이타 처리 하는 함수는 타이머나 별도 슬레드 형식으로 돌아가야 한다는 겁니다.
대부분 개발자의 소스는 어느 정도 이론적으로 맞습니다, 그러나 그 현장에서 디버깅해보거나 데이타베이스 컨설팅을 받아야합니다.
경우에 따라
1. 소켓으로 주고 받는 부분만 별도로 만들어 DB로 데이타를 넣게하는 경우도 있고,
별도 실행하는 프로그그램으로 만들어 DB로 데이타를 넣게하는 경우도 있고,
2. 소켓의 받는 이벤트에서 무리한 소스를 전부 스레드로 빼내는 방법도...
그런데 가장 편한건 소켓 받을때 타이머 하나만 실행시키고 그 타이머가 그 안의 기능을 돌립니다, 전역 변수로 테이타를 누적 시키는 방법.
즉, 데이타는 소켓이 계속 받습니다, 그걸 가공하는 함수는 타이머에 의해 정해짐 시간에 정해진 새수만 가공하죠, 별도로 만등 함수는 하나를 가공 중에 새 데이타가 들어와 타이머가 다시 돌게끔하면 지금 사용중인걸 하고 할건지 멈추고 새로이 가공을 할건지는 코딩하면 방법 등등...