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

专门做算法项目的网站怎么做公司网站推广

专门做算法项目的网站,怎么做公司网站推广,龙岗已经被深圳抛弃了吗,凡客诚品首页htmlGO语言学习(七) 上一期我们简单地带大家手把手实践一下利用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://www.dtcms.com/wzjs/419577.html

相关文章:

  • 安徽全过程网站搭建案例西安seo站内优化
  • 做宣传网站的公司百度推广怎么登录
  • 企业客户管理系统北京关键词优化报价
  • 企业网站报价方案模板360收录批量查询
  • 做代购直接网站下单杭州网站关键词排名
  • 竞价托管哪家公司好搜索引擎营销简称seo
  • 网站需求分析问题企业网络营销成功案例
  • 丽水市住房和城乡建设局网站女性广告
  • 那个网站攻略做的好关键词优化是怎么做的
  • 深圳食品网站建设永久免费无代码开发平台网站
  • 北京专业网站制作石家庄网站建设方案推广
  • 国内做贵金属返佣比较多的网站不收费推广网站有哪些
  • 国外网站建设软件核心关键词和长尾关键词举例
  • 建设网站赚的是什么钱有链接的网站
  • 网站制作入门杭州网站推广与优化
  • 怎么把自己做的网站放到公网上百度站长收录入口
  • 门户网站开发建设技术最新国内新闻事件今天
  • 西安高科鱼化建设有限公司网站百度统计登录
  • java调接口做网站幽默软文经典案例300
  • 网站建设的书 推荐百度指数免费查询
  • 静安区建设工程招标投标管理部门网站免费建网站软件下载
  • 在局网站 作风建设方案搜索量排行
  • 做不好的网站违法吗广点通投放平台登录
  • 个人建设什么网站互联网线上推广
  • 连云港市赣榆区建设局网站链接
  • 漫画网站css模板宁波seo资源
  • 手机网站 jquery 特效工作手机
  • wordpress文章页插件如何优化推广网站
  • 现在 做网站 最流行百度推广登录入口官网
  • 网站模板安装出现预先建设数据库精准客源引流平台