go 网络编程 | 青训营

53 阅读4分钟

IO调用

  • 准备阶段(内核缓冲区数据未就绪,继续读取或写入)
    • 判断是否能够进入准备阶段,即等待数据是否可用,内核完成这个过程
    • 阻塞和非阻塞:应用程序的表现,看进程是否挂起
      • IO操作准备阶段的完成方式,数据还没有准备好的时候(内核缓冲区的数据未就绪),应用程序的实际表现
      • 针对于进程在访问数据时
        • 阻塞和非阻塞是一种读取或者写入操作函数的实现方式
          • 阻塞:读取或写入函数将一直阻塞
          • 非阻塞:读取或者写入函数完成后会立即返回一个状态值
        • 数据还没有准备好时候,进程挂起表示阻塞,否则非阻塞
  • 操作阶段(内核缓冲区数据已就绪,准备拷贝)
    • 执行实际的IO调用,数据从内核缓冲区拷贝到用户进程缓冲区
      • 实际IO操作阶段的完成方式(拷贝),指实际访问数据的机制,IO操作是否会使得进程挂起
      • 同步
        • 主动发送请求并等待IO操作完毕的方式,IO操作未完成前,会导致应用程序进程挂起
      • 异步
        • 用户触发IO操作后开始做自己的事情,IO操作已经完成时,会得到IO完成的通知,通过这个机制,使得进程在数据读写的过程时不阻塞
        • 异步特点:通知

阻塞和同步

  • 同步调用,当前线程是运行状态,从底层讲,只是从逻辑上来讲没有返回,当前线程还可以处理其他信息
  • 阻塞调用,当前进程是阻塞不可用的状态,线程没有返回并且不能处理其他信息

session与cookie

  • session

    • 存储到服务器
    • 安全,一定时间内保存在服务器,访问量增多时会比较占用服务器性能,考虑性能用cookie
    • 登录信息敏感数据保存在session中
  • cookie

    • 存储到客户端浏览器上
    • 不安全,可以查询,存储客户端浏览器的cookie,伪造存在客户端浏览器进行欺骗请求
    • 不敏感信息可以用cookie存储
    • 由于单个cookie保存的数据不超过4kb,一般浏览器会有一个站点cookie数量的限制
    • cookie具有不可跨域性(很不好的点)
      • 会话cookie不设置过期时间,浏览器关闭就消失,一般存储在内存
      • 持久cookie设置过期时间,关闭浏览器也不会消失cookie,一般存储到硬盘中
  • seesion和cookie共享

    • 多网站单服务器,解决不同网站上SessionId共享
      • 网站域名不同,对于同一父域名不同子域名
      • 可改变cookie的存储范围到父域名,达到cookie和sessionId的共享

输入网址到浏览器渲染

  1. 在客户端浏览器中输入网址URL
  2. 发送DNS获取URL对应web服务器的IP地址
  3. 服务器和浏览器建立TCP连接
  4. 向对应IP地址发送相应的HTTP或者HTTPS请求
  5. 响应请求,返回URL数据或错误信息,若设定重定向,则重定向到新的URL地址
  6. 客户端浏览器下载数据后解析HTML源文件,解析过程中实现对页面的排版,解析完成后再浏览器中显示基础的页面
  7. 分析页面中的超链接,显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部显示

http和https

  • http超文本传输协议 80

    • 明文传输,无状态的连接
    • 1.0
    • 1.1
    • 2.0
    • 3.0
  • https 具有安全性的ssl/tls加密传输协议 443

    • 到CA申请证书,一般是需要付费
    • 由SSL/TLS+HTTP协议构建的可进行加密传输身份认证的网络协议
  • 无状态和有状态

    • Web服务的状态指的是请求的状态,而不是资源的状态
    • C和S进行交互操作时所留下来的公共信息(工作流、用户状态信息等数据)
    • 有状态
      • 典型用户登录状态保存在Server的Session中
      • 对负载均衡不利
    • 无状态
      • 在无状态的Web服务中,每一个Web请求都必须是独立的,请求之间是完全分离的
      • 请求必须包含有能够让服务器理解请求的全部信息,包括自己的状态信息
      • 分布式系统,Restful的无状态是非常重要的原则,且能够有较强的容错和可伸缩性,Rest中每个对象都是URL表示,状态信息会打包进每一条信息,保证对象的处理总是无状态的,能被任意的Server应答

总结

  • 网络上都行都可以融汇贯通想一想,串起来更好理解
  • 还是要写代码才行