我已經看到允許通過http訪問的應用程序(如我的路由器)。這個工作到底如何?我猜測那裏有一個接受http的嵌入式web服務器,但是在那之後它又是如何工作的?是否有某種應用程序服務器解析命令並配置傳入端口等?我在哪裏可以瞭解更多關於這種事情的工作原理? 謝謝你的時間。嵌入式Web服務器如何控制其硬件?
回答
Web服務器是一個非常流行的嵌入式系統項目。大多數路由器比你可能意識到的更強大,而且很多人破解了這些。您也可以通過編程微控制器並將其與ENC28J60等以太網芯片接口來構建您自己的微控制器。您可以使用小型8位微控制器(如PIC和AVR微控制器)構建迷你Web服務器。
因此,要開始使用,請查看業餘愛好者正在使用的各種微控制器並跳轉到教程。
您可以找到以幾乎任何語言編寫的非常基本的Web服務器的源代碼。你甚至可以用awk和netcat來實現一個非常基本的web服務器。 :)
嵌入式系統(取決於它是什麼)可能具有網絡堆棧,就像任何其他網絡堆棧一樣,將消息傳遞到解析它們的服務器。許多嵌入式系統肯定沒有一個功能齊全的網絡服務器,包括模塊等等(例如完整的Apache/PHP/mod_rewrite/SSL/etc)。但HTTP並不一定需要所有這些。 :)
YouTube視頻「用於硬實時系統的lwIP TCP/IP堆棧」(http://www.youtube.com/watch?v=MBk5wJ_8jEc)顯示了基於開源lwIP TCP/IP堆棧的嵌入式HTTP服務器。您將看到嵌入式設備提供的網頁以及嵌入式HTTP服務器的一些簡潔功能,如服務器端包含(SSI)和通用網關接口(CGI)。 SSI允許您即時生成網頁的一部分。這樣嵌入式目標就可以生成動態變化的內容。 CGI允許從瀏覽器(HTTP客戶端)到嵌入式目標的通信。這樣你可以更新或改變目標。這兩個功能一起使您可以使用標準Web瀏覽器作爲嵌入式設備的遠程用戶界面。沒有任何腳本在瀏覽器中運行,這都是可能的。
當然,您還可以使用瀏覽器中的可執行內容(例如JavaScript,Java applet或其他)與TCP/IP或UDP/IP上的目標進行通信。
上述視頻還顯示了其他有用的功能,如目標動態獲取來自DHCP服務器的IP地址以及與嵌入式目標之間的UDP通信。視頻結尾處提供了有關嵌入式HTTP示例的完整源代碼和文檔的鏈接。
Webserver解析請求,獲取請求參數並傳遞給其他軟件來處理。在一些小系統中,併發請求的數量很小,web服務器也可以作爲請求處理程序工作。
例如: 假設您想更改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
出的Web服務器源代碼,並建立獨立的應用程序,或CGI script。
- 1. 嵌入式Web服務器
- 2. 嵌入式web服務器運行php
- 3. Chrome Packaged App +嵌入式Web服務器
- 4. .NET中的嵌入式Web服務器
- 5. 嵌入式服務器的Web技術
- 6. 如何嵌入ascx到DLL(asp.net服務器控制)
- 7. 如何將控制器注入服務?
- 8. 春嵌入式服務器
- 9. 嵌套服務器控件
- 10. ASP.net Web服務器控件
- 11. 如何渲染其他控制器(服務器)文件?
- 12. 嵌入式WebBrowser Web控制檯訪問
- 13. 服務器控制服務器控制
- 14. 如何將JQuery嵌入到自定義服務器控件中
- 15. Web服務事務控制
- 16. 帶鍵盤或其他硬件按鈕的伺服控制器?
- 17. 集成了XML解析器的嵌入式Web服務器
- 18. 嵌入式Web控件(IWebBrowser2),嵌入式JavaScript的onkeydown和onkeyup不燒製
- 19. 從Windows Web服務獲取Linux服務器硬件信息
- 20. symfony3嵌入式控制器的形式
- 21. Neo4j嵌入式HA服務器模式
- 22. 如何禁用服務器端驗證mvc web api控制器
- 23. Web服務控制器設計問題
- 24. Web服務控制器設計
- 25. 如何將Jersey REST web服務添加到嵌入式tomcat中?
- 26. 你如何注入條件的服務到AngularJS 1控制器
- 27. 如何在OSGi框架中嵌入Web服務器?
- 28. 如何在Java類中嵌入Web服務器?
- 29. 如何將Web服務器嵌入到CAS webapp版本
- 30. 記錄下級嵌入式web服務器
它爲什麼會與非嵌入式Web服務器有什麼不同? – 2011-03-29 20:40:09
其實,你的問題讓我從一個完全不同的角度思考這個問題。 – Rod 2011-03-29 20:44:13