【每日笔记】【Go学习笔记】2019-01-16 go网络编程

栏目: Go · 发布时间: 6年前

内容简介:作者:施洪宝使用示例(net/http包中还有其他方式构建http服务, 具体情况参考官方文档)

作者:施洪宝

一. 介绍

二. net包

    • 2.官方文档中已经说明了如何使用net包实现tcp服务端监听
    ln, err := net.Listen("tcp", ":8080")
    if err != nil {
    // handle error
    }
    for {
    conn, err := ln.Accept()
    if err != nil {
        // handle error
    }
    go handleConnection(conn)
    }
    • 从使用库的一方来看, 接受连接的操作是阻塞式的, 使用方只需按照阻塞式网络编程进行处理即可
    • 由于go有自己的协程调度, 在接受网络连接时, 实际使用的是IO多路复用, 具体则是通过sysmon线程进行操作
    • 由于go具有垃圾自动回收以及协程, 故而针对每个网络请求, 开启单独协程进行处理

    三. net/http包

    使用示例(net/http包中还有其他方式构建http服务, 具体情况参考官方文档)

    http.Handle("/foo", fooHandler)
    http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
    })
    log.Fatal(http.ListenAndServe(":8080", nil))
    • http.Handle, http.HandleFunc用于向DefaultServeMux注册处理函数
    • http.ListenAndServe用于启动http服务, 当第二个参数为nil时, 表示使用默认的DefaultServeMux处理http请求

    3.1 源码简介

    • 1.go采用1.11.4, 不同的版本实现可能不同, 源码参见src/net/http/server.go
    • 2.结构体定义
    type ServeMux struct {
    mu    sync.RWMutex
    m     map[string]muxEntry
    hosts bool // whether any patterns contain hostnames
    }
    var DefaultServeMux = &defaultServeMux
    var defaultServeMux ServeMux
    //http请求处理接口
    type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
    }
    • 3.函数定义
    func Handle(pattern string, handler Handler)
    func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
    func ListenAndServe(addr string, handler Handler) error
    • 4.基本流程

      • 通过http.Handle或者http.HandleFunc, 向DefaultServeMux中注册一些url相关的处理函数
      • 通过http.ListenAndServe启动web服务
      • 客户端发送http请求后, 服务端接受请求, 创建协程处理请求(找到最匹配的url并调用之前设置的处理函数)

    以上所述就是小编给大家介绍的《【每日笔记】【Go学习笔记】2019-01-16 go网络编程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    重构(影印版)

    重构(影印版)

    Martin Fowler / 中国电力出版社 / 2003-7-1 / 49.00元

    随着对象技术应用越来越普及,软件开发社区出现了一个新的问题。缺乏经验的开发者编写出了大批设计较差的程序,导致这些应用程序非常低效,且难于维护和扩展。本书除了讨论重构的各种技巧之外,还提供了超过70个可行重构的详细编目,对如何应用它们给出了有用的提示;并以step by step的形式给出了应用每一种重构的指南;而且用实例展示了重构的工作原理。这些示例都是用Java语言写成的,但其中的思想却可以运用......一起来看看 《重构(影印版)》 这本书的介绍吧!

    XML 在线格式化
    XML 在线格式化

    在线 XML 格式化压缩工具

    UNIX 时间戳转换
    UNIX 时间戳转换

    UNIX 时间戳转换

    HEX HSV 转换工具
    HEX HSV 转换工具

    HEX HSV 互换工具