1 / 11

1Kb 초소형 웹서버 구조 - 가을남자 덕현 -

< 네트워크 >. 1Kb 초소형 웹서버 구조 - 가을남자 덕현 -. 웹서버 기능. 1.html/ htm 웹페이지 처리 / 전송 2. jpg/gif 등 이미지 파일 전송 3. 다중 접속 기능 4. Zip 등 압축파일 전송 5. 최소한의 http 프로토콜 처리 (get, ok). 1. 2. 3. 4. 코 드 흐 름 도. 전체 Flow chart. How to minimize the size of code?. 총 7 단계 절차 : 7kb->1kb

Download Presentation

1Kb 초소형 웹서버 구조 - 가을남자 덕현 -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. <네트워크> 1Kb 초소형 웹서버 구조-가을남자 덕현-

  2. 웹서버 기능 1.html/htm웹페이지 처리/전송 2. jpg/gif 등 이미지 파일 전송 3. 다중 접속 기능 4. Zip 등 압축파일 전송 5. 최소한의 http 프로토콜 처리(get, ok) 1 2 3 4

  3. 코 드흐름 도 전체 Flow chart

  4. How to minimize the size of code? 총 7단계 절차: 7kb->1kb 1. IE, FireFox등 상용 브라우저의 우수성? "HTTP/1.0 200 OK\r\n“와 "Content-type:text/plain\r\n\r\n" 두 가지 메타데이터만 전송하도록 했다. (1kb 정도 줄일 수 있다) 2. 다양한 컴파일러 선택 3. 엔트리포인트 강제 지정(2kb 정도 줄일 수 있다) 4. 파일 정렬(alignment) (0.5kb 정도 줄일 수 있다) 5.섹션합병(merging)(2kb 정도 줄일 수 있다) 6. VC6 버전 cl.exe(컴파일러) 이용함 7. c 기본 라이브러리 사용을 배제하고 win 32 api라이브러리 이용 (0.5kb 정도 줄일 수 있다)

  5. 똑똑한 익스플로러와파이어폭스? 원래 ‘원칙적으로’ 전송해야 하는 메타 데이터들 send(cS, "HTTP/1.0 200 OK\r\n", 17, 0) send(sock, "My web Server\r\n", 15, 0) send(sock, "Content-length:1024\r\n", 21, 0) send(cS, "Content-type:text/plain\r\n\r\n",27, 0) 테스트 결과 두 가지만 전송해도 상용 웹브라우저는 알아듣는다. send(cS, "HTTP/1.0 200 OK\r\n", 17, 0) send(cS, "Content-type:text/plain\r\n\r\n",27, 0) 파싱, send,저장 에 필요한 추가적인 함수호출, string 클래스 사용 줄어듬

  6. 어느 컴파일러가 가장 우수할까? Dev++ 내장 컴파일러(약24kb) VC2008의 cl.exe(약 7kb) VC6의 cl.exe(약8kb) Gcc컴파일러(약 7.2kb) Lcc컴파일러(약 32kb) ※컴파일 옵션에 따라 다소 차이가 날 수 있음 . 파일 포맷 merging과 파일 alignment를 수행하지 않았을 때 .

  7. 엔트리 포인트 강제 지정 엔트리 포인트란? 사용자가 프로그램을 실행했을때, 코드에서의 프로그램의 시작 지점 c/c++프로그램에서는 당연히 main 함수부분이 엔트리 포인트가 되나 사실은 그전에 내부적으로 내부에서 main 전에 커맨드 라인 인자, 프로그램 초기화 등을 수행한 이후에 main 함수를 호출한다. 따라서 강제로 이러한 절차를 뛰어넘고 (argv[] 커맨드 입력을 사용하지 않는다면)main 함수부터 바로 프로그램 실행이 되도록 지정을 해서, 메모리 약 2kb 정도를 절약할 수 있다. #pragma comment(linker,"/ENTRY:main") //링커에게 코드의 엔트리 포인트는 main 이라고 명시적으로 알려준다

  8. 파일 정렬 및 합병 Server.exe파일의 구조 PE 파일 포맷 섹션으로 나뉘어져 있고 각 섹션마다 극히 드문경우를 제외하고 섹션 뒤에 빈공간이 생길 수 밖에 없다 #pragma comment(linker, "/FILEALIGN:4") #pragma comment(linker, "/ALIGN:4") // Merge sections #pragma comment(linker,/MERGE:.rdata=.data") #pragma comment(linker, "/MERGE:.text=.data") #pragma comment(linker, "/MERGE:.reloc=.data")

  9. C 기본 라이브러리 함수 VSwin 32 api함수 C 라이브러리인 stdio.h와 Stdlib.h에 포함된 원래 사용했던 함수 Printf() Fopen() Fread() Memset() Exit() Windows.h에 포함된 Win 32API의 기본함수들 Wprintf() CreateFile() ReadFile() zeroMemory() ExitProcess() VS #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #include <windows.h> 헤더파일 두 개만 include

  10. 닷넷 프레임워크 종속성 • 우리 웹서버가VC 2008 이나 VC2010가 깔려있지 않는 • 시스템에서 동작하지 않는다면? • -VC6로 빌드한 코드는 윈도우 기본 dll만 사용하기 때문에 닷넷 프레임워크 • (2005이상)이 깔려있지 않는 시스템 환경에서도 동작한다 • VC6컴파일러는 사용자에게 매우 관대하다! • 다소 무리한 파일 병합,정렬도 받아준다

  11. 정리하면

More Related