嵌入式中通常是使用開源的Goahead webserver服務器,CGI也都是用C語言進行編寫開發的。項目中想要在web上實現圖片流的視頻播放效果,考慮到兩種方法,一種是瀏覽器端來進行圖片的主動獲取,一種是服務器端來進行圖片的主動推送,即webpush技術。webpush技術顯然更高效,但在Goahead上的實現過程當中遇到了點問題。 web
下面是一個最簡單的使用C語言編寫的CGI來測試使用Goahead是否支持Webpush技術,以及運行的機制。 瀏覽器
#include <stdio.h> #include <stdlib.h> int main() { int ret,i; printf("HTTP/1.1 200\r\n"); //http協議的頭及push技術頭 printf("Content-type: multipart/x-mixed-replace;boundary=section\r\n\r\n"); printf("--section\r\n"); //push內容的開始邊界,服務器進行識別 for(i = 0; i < 10000; i++) { printf("Content-type: text/plain\r\n\r\n"); //指定內容的類型 printf("i = %d\n", i); printf("--section\n"); //下一次內容開始 fflush(stdout); //刷新內容到瀏覽器,這個很關鍵,不然瀏覽器會是一次性顯示的效果 usleep(100000); } return 0; }上述示例在IE瀏覽器上沒法正確運行實現webpush效果,在Chrome瀏覽器和Firefox瀏覽器上均能實現webpush效果,即間隔100ms更新i的值。也就是說Goahead webserver是支持webpush技術的。實現視頻流就是將循環中的printf("i = %d\n", i);換成jpg的圖片數據發送給瀏覽器,內容類型改爲「image/jpeg"。
可是在測試的過程當中遇到了兩個主要的問題: 緩存