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方法持续调用来达成分块响应。
Request包
- 跟随重定向,followRedirct,默认开启
- 重定向最大值,maxRedircts,默认10
- cookie jar,通过传送jar来传送cookie
网友评论