当前位置: 首页 > wzjs >正文

东莞网站seo技术做招聘的网站有哪些

东莞网站seo技术,做招聘的网站有哪些,新手学做网站下载,app应用开发GO语言学习(七) 上一期我们简单地带大家手把手实践一下利用GO来构建服务器,大家是不是很不接里面为啥是这样操作的,所以这一期我们就来带领大家一起学习这些是如何实现web的工作,了解其底层实现方式,任何语…

GO语言学习(七)

上一期我们简单地带大家手把手实践一下利用GO来构建服务器,大家是不是很不接里面为啥是这样操作的,所以这一期我们就来带领大家一起学习这些是如何实现web的工作,了解其底层实现方式,任何语言都是万变不离其宗。

首先我们得先理解这些概念:

  • Request:用户发送请求的消息,主要用于服务器来解析用户请求信息,包括post,个体,URL,cookie等消息
  • Response:服务器反馈给客户端的信息
  • Handler:用于处理请求和生成返回信息的逻辑处理信息
  • Conn:用户请求的链接(不具有延迟性)

这些基础知识理解了之后我们就来分析一下http包的运行处理机制:

  • 创建Listen Socket, 监听指定的端口, 等待客户端请求到来。
  • Listen Socket接受客户端的请求, 得到Client Socket, 接下来通过Client Socket与客户端通信。
  • 处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST方法, 还可能要读取客户端提交的数据, 然后交给相应的handler处理请求, handler处理完毕准备好客户端需要的数据, 通过Client Socket写给客户端。

实现了如上的一些都是通过Golang的net/http包来实现的,下面我们从代码角度来分析一下:

首先先定义一个监听函数:

func ListenAndServe(addr string, handler Handler) error {server := &Server{Addr: addr, Handler: handler}return server.ListenAndServe()
}

这个ListenAndServe函数会初始化一个sever对象,然后调用了Server对象的方法ListenAndServe实现功能,代码如下:

func (srv *Server) ListenAndServe() error {if srv.shuttingDown() {return ErrServerClosed}addr := srv.Addrif addr == "" {addr = ":http"}ln, err := net.Listen("tcp", addr)if err != nil {return err}return srv.Serve(ln)
}

这个ListenAndServe调用了net.Listen("tcp", addr),也就是底层用TCP协议(起到链接的作用)搭建了一个服务,最后调用src.Serve监控我们设置的端口,然后我们是如何接收客户端的请求又要用到下面的方法来实现,代码如下:

func (srv *Server) Serve(l net.Listener) error {...ctx := context.WithValue(baseCtx, ServerContextKey, srv)for {rw, err := l.Accept()...connCtx := ctxif cc := srv.ConnContext; cc != nil {connCtx = cc(connCtx, rw)if connCtx == nil {panic("ConnContext returned nil")}}tempDelay = 0c := srv.newConn(rw)c.setState(c.rwc, StateNew, runHooks) // before Serve can returngo c.serve(connCtx)}
}
func (c *conn) serve(ctx context.Context) {...ctx, cancelCtx := context.WithCancel(ctx)c.cancelCtx = cancelCtxdefer cancelCtx()c.r = &connReader{conn: c}c.bufr = newBufioReader(c.r)c.bufw = newBufioWriterSize(checkConnErrorWriter{c}, 4<<10)for {w, err := c.readRequest(ctx)...// HTTP cannot have multiple simultaneous active requests.[*]// Until the server replies to this request, it can't read another,// so we might as well run the handler in this goroutine.// [*] Not strictly true: HTTP pipelining. We could let them all process// in parallel even if their responses need to be serialized.// But we're not going to implement HTTP pipelining because it// was never deployed in the wild and the answer is HTTP/2.serverHandler{c.server}.ServeHTTP(w, w.req)w.cancelCtx()...}
}

解释一下上面的两段代码,从头到尾仔细看,这个对你理解构建请求服务十分重要:

这个函数里面起了一个for{},首先通过Listener接收请求:l.Accept(),其次创建一个Conn:c := srv.newConn(rw),最后单独开了一个goroutine,把这个请求的数据当做参数扔给这个conn去服务:go c.serve(connCtx)。这个就是高并发体现了,用户的每一次请求都是在一个新的goroutine去服务,相互不影响。conn首先会解析request:w, err := c.readRequest(ctx), 然后获取相应的handler去处理请求:serverHandler{c.server}.ServeHTTP(w, w.req),ServeHTTP的具体实现如下:

在这个中我为大家列出ServeHTTP具体实现过程:

func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) {handler := sh.srv.Handlerif handler == nil {handler = DefaultServeMux}if req.RequestURI == "*" && req.Method == "OPTIONS" {handler = globalOptionsHandler{}}handler.ServeHTTP(rw, req)
}

解释这个sh.srv.Handler说白了就是我们刚才在调用函数ListenAndServe时候的第二个参数,我们前面例子传递的是nil,也就是为空,那么默认获取handler = DefaultServeMux,那么这个变量用来做什么的呢?对,这个变量就是一个路由器,它用来匹配url跳转到其相应的handle函数,那么这个我们有设置过吗?有,我们调用的代码里面第一句不是调用了http.HandleFunc("/", sayhelloName)嘛。这个作用就是注册了请求/的路由规则,当请求uri为"/",路由就会转到函数sayhelloName,DefaultServeMux会调用ServeHTTP方法,这个方法内部其实就是调用sayhelloName本身,最后通过写入response的信息反馈到客户端。

通过这期内容大家是不是基本掌握了web开发的核心逻辑,是不是更加理解其底层实现,大家有啥不懂的欢迎各位在评论区讨论,下一期将会更加细致的帮助各位理解http的实现原理,带你剖析它的底层逻辑,请各位持续关注,谢谢各位友友们了。


文章转载自:

http://iGTjqFU3.xbxwk.cn
http://q7tYpOhN.xbxwk.cn
http://d5dtyDHy.xbxwk.cn
http://teUlwbH3.xbxwk.cn
http://P964ayJD.xbxwk.cn
http://PswUZU9y.xbxwk.cn
http://JyzQJT9L.xbxwk.cn
http://rPoGY4jA.xbxwk.cn
http://0d3LJ3N5.xbxwk.cn
http://5TrZLCtP.xbxwk.cn
http://Lx0iidfx.xbxwk.cn
http://vYgif5Nx.xbxwk.cn
http://RKsTcOKb.xbxwk.cn
http://5PzyBv7P.xbxwk.cn
http://9NgG7j3h.xbxwk.cn
http://pXYCw4If.xbxwk.cn
http://X7cbZ2lV.xbxwk.cn
http://39OJwdnE.xbxwk.cn
http://KHNjSsZw.xbxwk.cn
http://u5gaBv04.xbxwk.cn
http://Lnw3IIgK.xbxwk.cn
http://fCu46q5Z.xbxwk.cn
http://gwSqZlsm.xbxwk.cn
http://nc36Wl6f.xbxwk.cn
http://oqMB0De4.xbxwk.cn
http://NEQ3G1T5.xbxwk.cn
http://gQ5r4FTj.xbxwk.cn
http://ValyV5dw.xbxwk.cn
http://ZuDjaSQI.xbxwk.cn
http://HmqjR5Zl.xbxwk.cn
http://www.dtcms.com/wzjs/641913.html

相关文章:

  • 禹州做网站的公司仙居网站开发
  • 做网站免费景点网站设计与制作
  • 中山小型网站建设公司小说网站开发的看书软件
  • 电子商务网站建设课后答案做书app下载网站有哪些
  • 电商网站功能介绍平面设计需要学什么软件?
  • 公司网站建设建议营销推广方法有哪些
  • 做外贸网站能用虚拟主机吗360网站排名怎么做
  • 扬州企业做网站支付商城网站制作
  • 请网站制作公司费用搜索引擎优化总结感悟
  • 昆明优化网站深圳罗湖区地址随便来一个
  • 襄阳电商网站建设商城网站如何搭建
  • 成都便宜做网站的电商平台怎么注册
  • php钓鱼网站怎么做视频教程上海到北京的火车
  • 网站模版化配置google网页版登录入口
  • 莱州做网站的公司个人博客网站制作搭建
  • 有什么网站开发客户网站没有域名设置
  • 合肥网站推广公司做动画网站
  • 淮南建网站公司做繁体书的网站
  • 网站域名和空间费用网站流量提供商
  • 如何保护我做的网站模板手机app开发与应用
  • 北京网站托管的公司简单的html网站开发
  • 门户网站建设目的php 网站开发教程
  • wordpress培训类网站模板青海网站建设价格低
  • 网站seo 优帮云提高网站的权重的最佳方法
  • wordpress站点标题字体html静态网页制作代码免费
  • 台州城乡建设局网站类似58同城分类信息网站开发
  • 我做动作你来猜的网站网站开发 商标第几类
  • 建设部一建查询网站wordpress自动标签内联
  • 大学英文网站建设方案宁夏交通厅建设局网站
  • 购物网站项目简介最简单的3d动画制作软件