修复了一下错别字

This commit is contained in:
xiemengjun
2012-11-22 22:15:37 +08:00
parent 79a9ee9557
commit 85f11b8436

2
3.3.md
View File

@@ -33,7 +33,7 @@ Handler处理请求和生成返回信息的处理逻辑
前面小节的代码里面我们可以看到Go是通过一个函数来操作这个事情的`ListenAndServe`来监听起来的这个底层其实这样处理的初始化一个server对象然后调用了`net.Listen("tcp", addr)`也就是底层用TCP协议搭建了一个服务然后监控我们设置的端口。
监控之后如何接收客户端的请求呢?上面代码执行监控端口之后,调用了`srv.Sere(net.Listener)`函数,这个函数就是处理接收客户端的请求信息。这个函数里面起了一个`for{}`首先通过Listener接收请求其次创建一个Conn最后单独开了一个goroutine把这个请求的数据当做参数扔给这个conn去服务`go c.serve()`。这个就是高并发体现了用户的每一次请求都是在一个新的goroutine去服务相互不影响。
监控之后如何接收客户端的请求呢?上面代码执行监控端口之后,调用了`srv.Serve(net.Listener)`函数,这个函数就是处理接收客户端的请求信息。这个函数里面起了一个`for{}`首先通过Listener接收请求其次创建一个Conn最后单独开了一个goroutine把这个请求的数据当做参数扔给这个conn去服务`go c.serve()`。这个就是高并发体现了用户的每一次请求都是在一个新的goroutine去服务相互不影响。
那么如何具体分配到相应的函数来处理请求呢conn首先会解析request:`c.readRequest()`,然后获取相应的handler:`handler := c.server.Handler`,也就是我们刚才在调用函数`ListenAndServe`时候的第二个参数我们前面例子传递的是nil也就是为空那么默认获取`handler = DefaultServeMux`,那么这个变量用来做什么的呢这个变量就是一个路由器它用来匹配url跳转到其相应的handle函数那么这个我们有设置过吗?有,我们调用的代码里面第一句不是调用了`http.HandleFunc("/", sayhelloName)`嘛。这个作用就是注册了请求`/`的路由规则当请求uri为"/"路由就会转到函数sayhelloNameDefaultServeMux会调用ServeHTTP方法这个方法内部其实就是调用sayhelloName本身最后通过写入response的信息反馈到客户端。