2011-03-29 7 views
0

http를 통한 액세스를 허용하는 응용 프로그램 (내 라우터와 같은)이 있습니다. 그게 정확히 어떻게 작동합니까? 나는 거기에 http를 받아 들일 수있는 임베디드 웹 서버를 추측하고 있지만 어떻게 그 이후에 작동합니까? 어떤 종류의 응용 프로그램 서버가 명령을 구문 분석하고 들어오는 포트 등을 구성합니까? 이런 종류의 일이 어떻게 이루어지는 지 자세히 알 수 있습니까? 시간 내 주셔서 감사합니다.임베디드 웹 서버는 어떻게 하드웨어를 제어합니까?

+3

왜 임베디드가 아닌 웹 서버와 다른 점이 있습니까? –

+0

사실, 당신의 질문은 저에 대해 완전히 다른 관점에서 생각하게합니다. – Rod

답변

0

웹 서버는 꽤 인기있는 임베디드 시스템 프로젝트입니다. 대부분의 라우터는 당신이 깨닫지 못하는 것보다 강력하고 많은 사람들이 그것을 해킹합니다. 또한 마이크로 컨트롤러를 프로그래밍하고 ENC28J60과 같은 이더넷 칩과 인터페이스하여 자신 만의 제품을 만들 수도 있습니다. PIC 및 AVR 마이크로 컨트롤러와 같은 소형 8 비트 마이크로 컨트롤러를 사용하여 미니 웹 서버를 구축 할 수 있습니다.

그래서 시작하려면 취미 애호가가 사용하는 다양한 마이크로 컨트롤러를 살펴보고 튜토리얼에 들어가십시오.

0

거의 모든 언어로 작성된 매우 기본적인 웹 서버에 대한 출처를 찾을 수 있습니다. 심지어 awk 나 netcat 같은 곳에서 아주 기본적인 웹 서버를 구현할 수도 있습니다. :)

임베디드 시스템은 (무엇인지에 따라) 다른 서버와 마찬가지로 네트워크 스택을 가지고있어 서버가 구문 분석되는 서버에 메시지를 전달할 수 있습니다. 많은 임베디드 시스템에는 모듈, etc 등 (예 : Apache/PHP/mod_rewrite/SSL/등)이 설치된 완전한 기능의 웹 서버가 없습니다. 그러나 HTTP는 반드시 모든 것을 요구하지는 않습니다. :)

2

"하드 실시간 시스템 용 lwIP TCP/IP 스택"(http://www.youtube.com/watch?v=MBk5wJ_8jEc)은 작동중인 오픈 소스 lwIP TCP/IP 스택을 기반으로하는 내장 된 HTTP 서버를 보여줍니다. 임베디드 장치에서 제공되는 웹 페이지는 물론 SSI (Server-Side Includes) 및 CGI (Common Gateway Interface)와 같은 내장 HTTP 서버의 일부 기능을 볼 수 있습니다. SSI를 사용하면 웹 페이지의 일부를 즉석에서 생성 할 수 있습니다. 이렇게하면 포함 된 대상에서 동적으로 변경되는 내용을 생성 할 수 있습니다. CGI는 브라우저 (HTTP 클라이언트)에서 내장 된 대상으로의 통신을 허용합니다. 그렇게하면 대상을 업데이트하거나 변경할 수 있습니다. 이 두 기능을 함께 사용하면 표준 웹 브라우저를 내장 장치에 대한 원격 사용자 인터페이스로 사용할 수 있습니다. 이것은 브라우저에서 스크립트를 실행하지 않고도 가능합니다.

물론 JavaScript (JavaScript, Java 애플릿 등)의 실행 가능 콘텐츠를 사용하여 TCP/IP 또는 UDP/IP를 통해 대상과 통신 할 수도 있습니다.

위의 비디오는 DHCP 서버에서 IP 주소를 동적으로 수집하는 대상 및 포함 된 대상에서 UDP 통신을 비롯한 기타 유용한 기능을 보여줍니다. 임베디드 HTTP 예제의 완전한 소스 코드 및 문서에 대한 링크는 비디오의 끝에 제공됩니다.

-1

Webserver는 요청을 구문 분석하고 요청 매개 변수를 얻은 다음 처리 할 다른 소프트웨어로 전달합니다. 일부 소형 시스템에서는 동시 요청 수가 적고 웹 서버는 요청 처리기로도 작동 할 수 있습니다.

예 : 은 LCD 백라이트를 변경한다고 가정합니다. 그것은 시스템의 규모에 따라

1. [Client]--(request via browser: http://:/backlight?level=20)-->[WebServer] 
2. [WebServer]--(call backlight controller application/thread with parameter: `level=20`)-->[Backlight Controller] 
3. [Backlight Controller]--(change GPIO pins)-->[HW]

는, 상기 백라이트 제어부는 별도의 어플리케이션 또는 웹 서버의 부분 일 수있다.

mongoose example (아래 그림 참조)에서 http://<ip>:<port>/api/v1/sum?n1=2&n2=4과 같이 요청하면 handle_sum_call이 호출됩니다. handle_sum_call은 웹 서버의 일부로 구현됩니다.

static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { 
    struct http_message *hm = (struct http_message *) ev_data; 

    switch (ev) { 
    case MG_EV_HTTP_REQUEST: 
     if (mg_vcmp(&hm->uri, "/api/v1/sum") == 0) { 
     handle_sum_call(nc, hm);     /* Handle RESTful call */ 
     } else if (mg_vcmp(&hm->uri, "/printcontent") == 0) { 
     char buf[100] = {0}; 
     memcpy(buf, hm->body.p, 
       sizeof(buf) - 1 < hm->body.len? sizeof(buf) - 1 : hm->body.len); 
     printf("%s\n", buf); 
     } else { 
     mg_serve_http(nc, hm, s_http_server_opts); /* Serve static content */ 
     } 
     break; 
    default: 
     break; 
    } 
} 

당신은 웹 서버의 소스 코드에서 handle_sum_call를 이동하고 별도의 응용 프로그램 또는 CGI script을 만들 수 있습니다.

관련 문제