Distribute/etc.2012. 9. 2. 22:31


심플 웹서버 실행화면- 심플 웹서버 실행화면 -

그저께부터 쉬엄쉬엄 만들기 시작한 심플 웹서버 프로젝트.

이제 생각 했던 기능은 거의 구현 된거같다.


구현내용]

1. 웹서버의 기본적인 파일요청에 대한 응답처리.

2. 응답시 미리 정의 된 MIME타입 테이블에 따라 올바른 MIME타입 반환

3. HTTP 1.1의 Continuous한 연결처리

4. 경로명등에 한글지원 (UTF-8, URL Decode)

5. Server side scripting 지원


다른것 보다 5번이 제일 중요하다.

사실 원래는 웹서버를 만들려는게 아니라 R모 사이트와 관련있는 일명 "펑게"를 만들려고 생각했었는데..

하는김에 서버스크립트를 지원하는 웹서버를 만들어서

다른데에도 범용적으로 쓸 수 있으면 좋겠다 싶어서 심플 웹서버 프로젝트가 시작됐다.

이 프로젝트의 중점인 서버스크립트 지원을 구현하는데에 RunUO의 사용자 스크립트 컴파일, 호출 방법 등이 이용되었다.

서버스크립트는 JSP의 서블릿과 비슷하게, C#코드로 요청에 대한 처리를 담당할 클래스파일을 작성하면,

서버가 실행 될 때 해당 파일들을 컴파일해 모듈로서 서버에 로드된다.

하지만 서블릿과 달리 코드를 수정하면 웹서버를 재시작해야 적용된다.


동작순서]

1. Main 메소드 실행

2. 사용자가 작성한 스크립트 목록 수집 및 컴파일

3. 컴파일 된 스크립트모듈 로드

4. 스크립트모듈 내 각 클래스에 Initialize()메소드 존재시 해당 메소드 실행

   - 이 때 서버 환경, MIME타입 등록 등 기본 정보 구성 (서버 스크립트인 Configure.cs 이용)

   - 서버 스크립트로 사용 할 클래스도 이 때에 Container클래스에 등록해야 사용 가능하다.

5. 리스너 스레드 생성 및 리스너 시작, 클라이언트 연결 대기

6. 클라이언트 접속시 해당 요청 처리


서버스크립트 작성 예]

- 클래스 내에 public, static으로 선언된 Initialize() 메소드 생성

  - 이 메소드는 스크립트 컴파일 후 임의로 실행 되는 메소드로, 컨테이너에 서버 스크립트를 등록하는것이 주 목적이다.

- 요청처리기 생성

  - 클라이언트의 요청을 처리하기 위해 실행 될 메소드이다.

  - 기본형: public static void 메소드명(Request req, out Response resp)

  - 스크립트 내에서 out으로 지정된 Response형 인수를 생성해 가공하면,

     이 메소드를 호출한 컨테이너가 클라이언트에게 전송하는 구조이다.


서버스크립트 작성 예시- 서버스크립트 작성 예시 -



심플 웹서버 테스트화면- 심플 웹서버 테스트화면 -


===============================================================================================================

블로그 유입 키워드를 보면 C# 웹서버에 대한 관심이 많은 듯 하다.

개강 이후 지금까지 전혀 건드리지 않아서 POST 메소드에대한 처리도 안되지만 뭐..

일단 필요한 사람은 만들어쓰겠지..

SimpleWebServer.zip

'Distribute > etc.' 카테고리의 다른 글

Photoshop 7.0 웹용으로 저장 플러그인  (0) 2008.11.22
[JS] Net Transport의 IE 메뉴 확장 파일  (2) 2008.01.18
[VB] Clubbox Trayer v1.0  (0) 2007.08.12
[PHP] Wake on Lan Class  (0) 2007.07.05
Posted by 로드펭귄