2010-11-21 100 views
0

我最近開始潛入C編程的http編程,並且有一個可以處理GET和POST的正常運行的服務器。我的問題涉及我的網站加載時間以及我應該如何發送響應標題和響應消息。C Web服務器和Chrome開發工具問題

我注意到在Chromes資源跟蹤工具中,在大多數情況下(與服務器在同一網絡上)幾乎沒有(幾ms)連接/發送/代理/阻塞/等待時間,但接收時間可能會有所不同瘋狂。我不完全確定接收時間包括在內。我主要在png文件上看到長時間接收(40到140ms或更多)的時間,有時甚至是javascript文件,而很少看到其他文件,但它並不一致。

任何人都可以爲我闡明這一點嗎?

我還沒有做過太多的測試,但我想知道是否改變了我用來發送標題/消息的方法會有所幫助。我現在已經將站點的每個文件連同它的頭一起緩存在服務器內存中(全部在同一個char *中)。當我發送請求的文件時,我只是用頭文件/文件組合進行1次send()調用(它不涉及任何字符串操作b/c,它都是在服務器啓動時預先完成的)。

將它分成多個小的send()調用會更好嗎?

只需使用Chrome開發工具(通過無線路由器連接在本地網絡上)獲得的一些統計數據,網站的加載時間從120ms到570ms。它共有19個文件,共計139.85KB。它使用的電腦是帶有TinyCore linux的華碩901上網本(原子1.6ghz,2gb ddr2)。我知道我可以對線程啓動和其他一些事情進行一些優化,但不確定這會對它造成多大影響。

+0

您是否向Web服務器添加了任何分析或調試輸出信息?在代碼中的「主要」操作之間添加一些高分辨率定時信息可能會很有用,因此您可以從服務器端看到請求 - 響應循環的進展。 – 2010-11-21 03:42:39

+0

我目前沒有任何配置文件,只需最少的調試(根據需要刪除/添加它)。很大程度上依賴於chrome開發工具,可能會嚴重依賴。在一個很好的網站交付/加載時間的速度中,我真的在盲目尋找我應該尋找的領域。 – Wolftousen 2010-11-21 03:54:31

回答

1

如果您要在一個send()中發送整個響應,則應該設置TCP_NODELAY套接字選項。

如果這沒有幫助,您可能想嘗試使用像Wireshark這樣的數據包捕獲工具來查看是否可以發現引入延遲的位置。

+0

我確實設置了TCP_NODELAY標誌,我會看到Wireshark可以告訴我什麼,謝謝你的提示。 – Wolftousen 2010-11-21 04:20:14