node高级编程网络部分阅读记录

TCP

套接字对象

  • socket可读流
    可以用socket.pause()和socket.resume()来暂停和恢复socket数据接收
    也可以用pipe操作数据流({end:false}可以关闭pipe自动close功能)

  • socket.setEncoding();
    设置data数据编码。

  • socket.setTimeout(time, function);
    设置socket空闲连接超时时间,以及超时回调处理。

  • socket.setKeepAlive([time]);
    设置socket常连接。
    socket的常连接是通过发送空的ack确认包来保持的,这里可以设置每个包的时间间隔。

  • socket.setNodelay();
    Nagle算法
    tcp包的传输一般是一个包一个包的传输,如果数据大小不够一个包,他会等待后续的数据组成一个包,然后一起发送。这样会造成一定的时延,如果想要每次wirte都直接发送包,可以通过这个方法关闭TCP的Nagle算法。

  • socket的error事件
    如果未能捕获异常,可以通过process的uncaughtException事件进行监听处理。

TCP客户端

  • net.createConnection创建TCP客户端,返回的是net.Socket的一个实例,可读流也是可写流。
  • write方法写入数据后的回调函数是在数据传入网络后调用。
  • end方法只是传入一个FIN的信号,并不是立即关闭连接。
  • process.stdio初始化是处于pause状态。

HTTP

request对象

request对象是一个可读流,和socket一样可以通过流来操作他。也可以监听data事件来持续获取数据。

request属性

  • url
    除域名端口之外的路由部分

  • method

  • headers

response对象

response对象是一个可读流。

response属性

  • statusCode
  • httpVersion
  • headers

response方法

  • writeHeader()
    写入响应头并发送
  • setHeader()
    设置相应头,应当在发送之前设置。
  • removeHeader()
    删除相应头,应当在发送之前设置。
  • write()
    发送主体,在发送相应头之后。可以发送字符串或者已存在的缓冲区。
  • 以流的形式传送HTTP分块响应
    Header需设置Transfer-Encoding:chunked,这和Content-length会有冲突
    可以通过pipe和wirte方法持续调用来达成分块响应。

List of HTTP header fields

Request包

  • 跟随重定向,followRedirct,默认开启
  • 重定向最大值,maxRedircts,默认10
  • cookie jar,通过传送jar来传送cookie

你可能感兴趣的:(node高级编程网络部分阅读记录)