天天看點

Go語言_HTTP包http用戶端如何建立web服務端?golang伺服器的效率怎樣呢?

在Golang中寫一個http web伺服器大緻是有兩種方法:

1 使用net包的net.Listen來對端口進行監聽

2 使用net/http包

這裡是讨論如何使用net/http包建立一個web伺服器

net/http請求提供了HTTP用戶端和服務端的具體實作

先看到的是Get,Post,PostForm三個函數。這三個函數直接實作了http用戶端

1

2

3

4

5

6

7

8

9

10

11

12

<code>import (</code>

<code>    </code><code>"fmt"</code>

<code>    </code><code>"net/http"</code>

<code>    </code><code>"io/ioutil"</code>

<code>)</code>

<code>func main() {</code>

<code>    </code><code>response,_ := http.Get(</code><code>"http://www.baidu.com"</code><code>)</code>

<code>    </code><code>defer response.Body.Close()</code>

<code>    </code><code>body,_ := ioutil.ReadAll(response.Body)</code>

<code>    </code><code>fmt.Println(</code><code>string</code><code>(body))</code>

<code>}</code>

<code> </code> 

除了使用這三個函數來建立一個簡單用戶端,還可以使用:

http.Client和http.NewRequest來模拟請求

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<code>package main</code>

<code>    </code><code>client := &amp;http.Client{}</code>

<code>    </code><code>reqest, _ := http.NewRequest(</code><code>"GET"</code><code>, </code><code>"http://www.baidu.com"</code><code>, nil)</code>

<code>    </code> 

<code>    </code><code>reqest.Header.Set(</code><code>"Accept"</code><code>,</code><code>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"</code><code>)</code>

<code>    </code><code>reqest.Header.Set(</code><code>"Accept-Charset"</code><code>,</code><code>"GBK,utf-8;q=0.7,*;q=0.3"</code><code>)</code>

<code>    </code><code>reqest.Header.Set(</code><code>"Accept-Encoding"</code><code>,</code><code>"gzip,deflate,sdch"</code><code>)</code>

<code>    </code><code>reqest.Header.Set(</code><code>"Accept-Language"</code><code>,</code><code>"zh-CN,zh;q=0.8"</code><code>)</code>

<code>    </code><code>reqest.Header.Set(</code><code>"Cache-Control"</code><code>,</code><code>"max-age=0"</code><code>)</code>

<code>    </code><code>reqest.Header.Set(</code><code>"Connection"</code><code>,</code><code>"keep-alive"</code><code>)</code>

<code>    </code><code>response,_ := client.Do(reqest)</code>

<code>    </code><code>if</code> <code>response.StatusCode == 200 {</code>

<code>        </code><code>body, _ := ioutil.ReadAll(response.Body)</code>

<code>        </code><code>bodystr := </code><code>string</code><code>(body);</code>

<code>        </code><code>fmt.Println(bodystr)</code>

<code>    </code><code>}</code>

<a href="http://images.cnblogs.com/cnblogs_com/yjf512/201206/201206182159571172.png"></a>

http包封裝地非常bt,隻需要兩行!!:

<code>func SayHello(w http.ResponseWriter, req *http.Request) {</code>

<code>    </code><code>w.Write([]</code><code>byte</code><code>(</code><code>"Hello"</code><code>))</code>

<code>    </code><code>http.HandleFunc(</code><code>"/hello"</code><code>, SayHello)</code>

<code>    </code><code>http.ListenAndServe(</code><code>":8001"</code><code>, nil)</code>

進行端口的監聽:http.ListenAndServe(":8001", nil)

注冊路徑處理函數:http.HandleFunc("/hello", SayHello)

處理函數:func SayHello(w http.ResponseWriter, req *http.Request)

看看這個文章:

<a href="http://groups.google.com/group/golang-nuts/browse_thread/thread/cde2cc6278cefc90">http://groups.google.com/group/golang-nuts/browse_thread/thread/cde2cc6278cefc90</a>

node.js is 45% faster than golang(确實傷心)

golang服務端的效率确實沒有node.js高,幾乎是它的一半。但話說回來,如果一些并發量不是很大的site,還是可以使用golang做伺服器的。

本文轉自軒脈刃部落格園部落格,原文連結:http://www.cnblogs.com/yjf512/archive/2012/06/18/2554066.html,如需轉載請自行聯系原作者

繼續閱讀