현재 저희는 마이다스를 구현해서 시스템을 하나 오픈했는데,
궁금하고, 잘모르는 부분이 있어서 부탁드리겠습니다..
현재 개발환경은
DB서버는 AS400이고, DELPHI5에 3-TIER방식으로
SOCKETCONNECTION을 사용하고 있습니다.
클라이언트프로그램은 60본정도되고, 서버프로그램은 각관리별로 6본입니다.
근데, 마이다스가 런닝되는데, 문제가 생겨서요.
첫번째.. 궁금한 사항은 서버프로그램 작성시 RemoteDataModule생성시에
Instancing에서 선택하는 Multiple Instance와 Single Instance의 차이점을 알고 싶어요..
Multi로 하면 서버프로그램이 하나만 뜨지만,
Single로 하면 클라이언트수 만큼 서버프로그램이 뜨거든요..
두번째..궁금한 사항은
Multi방식으로 서버프로그램을 작업했을때..
하나의 서버프로그램에 여러 유저가 접속되어져 있어,
한명의 유저가 Down되어 서버를 다운시키면, 나머지 다른 유저들도 사용을 못해
강제로 SocketSever를 죽여 주어야 되는데,
이런 문제점때문에, Single방식으로 서버프로그램을 만들었을때..
하나의 서버프로그램이라도, 접속된 유저수 만큼 서버폼이 뜹니다..
이때.. 일정수 이상이 접속하면
아래의 메세지를 보여주고 마이다스서버가 다운되어버립니다..
=======================================================
"Insufficient memory for this operation"
"Alias : '제가만든 알리아스 이름 혹은 연결한 데이터베이스 명'"
=======================================================
혹시 이런문제점을 알고 계시면, 친절한 조언 부탁드리겠습니다..
멀티는 말 그대로 하나의 애플리케이션 서버의 데이타모듈부분을 모든
클라이언트들이 공유해서 사용합니다. 이경운 전역변수문제라든지
프로시져가 동시에 작업이 들어갔을때 쓰레드 충돌같은 걸 염두해
두셔야 합니다. 안그러면 하루에도 수십번 따운 현상을 겪을실 겁니다.
(제가 그랬었읍니다. ㅠㅠ)
싱글은 애플리케이션 서버와 클라이언트와 1:1로만 작업을 합니다.
결국 메모리가 많이 필요로 하겠죠..(BDE 메모리가 특히..)
님이 하시는 경우는 그냥 DCOM으로 하시는 것 같으신데 ..
만약 전역변수를 쓰시고 있다면 전역변수를 없애는 방향으로 잡으시고
(특정한 값이 필요로 하시다면 테이블 하나 만드셔서 작업을 하시고)
특히 주의 해야할 것이 쓰레드 충동문제인데 이경운 프로시져 시작부분에
Lock을 걸어주시고 끝나는 부분에 Lock을 해재시켜주시면 엉뚱한
충동은 안일어 날것입니다.
두번째 : "Insufficient memory for this operation"
BDE에 INIT부분에 보시면 MEMSIZE와 SHAREDMEMSIZE부분의 용량을
조정해주시면 됩니다. 각 데이타베이스 컴포넌트 하나 붙으므로 해서
그만큼의 메모리가 필요로 하니까요..
계산법은 DELPHI5 CONTACT에 나와있습니다.
이 책은 하나 사셔서 두고 두고 보시는게 좋겠다는게 제 생각입니다.
그래서 자세한 계산법은 안