1. 프로젝트 아웃라인 : 손님이 소매점에서 물건을 사고 고객카드나 휴대폰 번호를 제시하면
중앙서버에 등록이 되어 있는 고객인지 확인 인증하고 등록된 고객이면
고객 마일리지를 적립시켜주고 ,
미등록 회원이면 바로 중앙서버에 등록한 후 고객 마일리지를 적립해주는
내용입니다.
인증과 회원등록을 소켓으로 처리 하려합니다. 꼭 정해지 방법은 아니지만
이방법으로 구상중입니다.
2. 예상 부하량 : 동시에 5~10 유저가 소매상점에서 고객 인증 요청이나 회원등록요청을 하는 경우가 발생됩니다.
매출이 아주 빈번하게 발생됨.
- 고객인증 query : select memberno, membname, hp, point from member where memberno ='고객번호' 을 소켓으로
전송하면 서버에서 query 후 클라이언트 상점으로 전송
- 고객 등록 query : insert into member (memberno, membname,hp ,...) values('','',''....) 서버로 전송
- 고객 포인트 적립 query : update member set point = point + 적립포인트 where memberno = '고객번호'
3. 서버프로그램 설계 : 소켓 서버 컴포넌트는 인디소켓서버를 사용하기로 결정했습니다.
인디는 클라이언트 유저의 요청이 들어오면 유저별로 각각 쓰레드를 생성해서
처리한다고 해서 동시작업의 효율이 좋을것으로 판단해서 결정했습니다.
- 동일 고객이 동시에 마일리지 적립이 없으므로 쓰레드 동기화 처리는 안할려고 합니다.
각각의 쓰레드는 Tquery를 동적으로 생성해서 사용하고 반납하는 구조로 설계했슴다.
- 서버구현 소스
procedure TFMserver.IdTCPServer1Execute(AThread: TIdPeerThread);
var
sSVRReadStr: String;
begin
while not Athread.Terminated and AThread.Connection.Connected do begin
sSVRReadStr := AThread.Connection.Readln;
if Length(sSVRReadStr) > 0 then begin
if Copy(sSVRReadStr,1,1) = 'S' then
member_certifi
else if Copy(sSVRReadStr,1,1) = 'I' then
member_Insert
else if Copy(sSVRReadStr,1,1) = 'U' then
member_PointUp;
end;
end;
end;
4. 서버하드웨어구성 : P4 3.0 하이퍼 스레딩 지원CPU, 512Ram , 아수스 보드로 구성해 KT IDC에 넣을까 합니다.
질문1 : 서버프로그램을 위와 같이 구현했을때 5~10명의 동시 접속자를 처리하는데 문제가 없겠는지요?
혹시 인디 소켓서버 프로그램이 다운될 가능성이 없는지 있다면 어떻게 보완 해야 하는지 궁금합니다.
위와 같이 인디에서 재공되는 기본 쓰레드를 사용해도 되는지 , 아니면 별도의 쓰레드를 생성해서
사용하는 것이 좋은지 등 서버프로그램이 다운을 최소화 하는 방법을 알고 싶습니다.
인디 아닌 다른 컴포넌트가 좋인지..
** (IdTCPServer1Execute 자체가 쓰레드로 구현되는것으로 아는데 맞는지 모르겠네요?^^)
질문2 : 하드웨어를 일반PC 사양으로 구성해도 계획하고 있는데 동시 접속자를 처리하는데 무리가 없는 사양인지
무리가 있다면 어떤사양으로 하는게 좋은지 궁금합니다.
긴글 읽어 주셔서 감사 합니다
네트워크 프로그램은 처음인지라 .. .염려되는 부분이 많네요.
여러분들의 조언 부탁드립니다.
그럼 수고 하세요?
추가질문 : OK캐쉬백 시스템이 제가 구현하려고 하는것과 비슷한데 OK캐쉬백 서버 프로그램이
혹시 어떻게 구현되어 있는지 알고 계신분 있으면 조언 부탁 할께요 ^^;