안녕하세요..
Webbroker 로 web application 을 개발 중입니다 (ISAPI model 사용해서 ~.dll 로...).
그런데 궁금한 것이 웹서버 application 으로 되면 여러 사람이 동시에 접속을 할텐데, 프로그램 내에서 변수로 지정한 것이 접속자마다 따로 memory 상에서 유지가 되는지 알고 싶습니다. 책을 보면, win32 mode 에서 .dll 파일은 user 마다 별개의 instance 가 생성되기 때문에 전역 변수도 공유되지 않는다고 되어 있네요. 웹서버 애플리케이션도 마찬가지인지..
그런데 간단한 예제 프로그램을 만들어 본 결과, 반드시 그렇지 않은 것 같아서 문의드립니다.
예컨대
type
TWebModule1 = class(TWebModule)
pp2: TPageProducer;
.............
public
a : integer;
end;
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
inc (a); // Add A 버튼을 누르면, 여기서 A 값을 증가시킵니다.
Response.Content := pp2.Content;
end;
procedure TWebModule1.pp2HTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
if TagString = 'VARA' then ReplaceText := InttoStr(a); // 여기서 a 의 값으로 치환합니다.
end;
처럼 정의가 되어 있다 치고,
pp2의 HTML 문서에 다음을 포함시킵니다.
...........
Value of A = <#VARA>
............
웹브라우저 상에서 "Add A" 라고 써 있는 버튼을 누르면, inc(A) 코드를 실행하게 되고 TagReplace 를 통해
1이 증가된 A 의 값을 브라우저로 보여주는 간단한 예입니다.
그렇게 한 다음, 웹브라우저 상에서 위 페이지를 띄우고 버튼을 클릭하면, 값이 1씩 증가됩니다.
그런데 한 피시에서 웹 브라우저를 두 개 띄운 다음 (따라서 두 개의 윈도가 생기죠), 첫 번째 윈도에서 버튼을 눌러 값을 올립니다. 예컨대 5 가 나오게 올렸다고 치죠. 그런 다음 두 번째 윈도에서 "Add A" 버튼을 누르면, 두 번째 윈도의 값이 6으로 표시됩니다. 다시 첫 번째 윈도의 버튼을 누르면, 7 로 표시됩니다.
여기에 대해
첫째, 같은 PC 에서 두 개의 브라우저를 띄웠기 때문인지, 아니면 당연한 것인지
둘째, 만약 값을 따로 유지하고 싶다면 WebBroker 를 사용해서 처리하는 방법이 있는지
경험있는 분들의 조언을 바랍니다.
|