net模块和http模块是node最重要的两个模块,前者是基于TCP的封装,后者的本质也是TCP。他们通过 tcp通信,建立一个可以收发消息的web服务器。我在写的作品里面用的express也是封装的http的模块,本质都是一样的。


net建立TCP服务器,传入可选options配置信息。

net.createServer([options], [connectionListener])
//创建一个新的TCP服务器参数connectionListenner会被自动作为connection事件的监听器
options:{allowHalfOpen: false}如果允许半开连接,为true,当另一端的套接字发送FIN报文时套接字并不会自动发送FIN。套接字会变得不可读,但可写,应当调用end();

  1. var net=require('net');
  2. var server=net.createrSever(function(c){
  3. console.log('服务区已连接');
  4. c.on('end',function(){
  5. console.log('服务器断开');
  6. })
  7. c.write('hello\r\n');
  8. c.pipe(c);
  9. }).listen(3000,function(){
  10. console.log('服务器绑定在3000端口');
  11. })

一个简单的例子,向连接的客户端写入hello。值得一提的是net是一个stream流,巧用pipe,将输入写到输出,实际等于:

  1. c.on("data",function(data){
  2. c.write(data);
  3. })
  4. c.on("end",function(){
  5. c.end();
  6. })

net.connect(options,[connectionListener]),net.createConnection(options,[connectionListener]);

构建一个新的套接字对象并打开所给位置的套接字,当套接字就绪时会触发“connect”事件
options:{
  port:客户端连接到的端口,
  host:客户端连接到的主机,缺省为localhost
  localAddress:网络连接绑定的本地接口,
  family:IP栈版本,缺省为4
}

  1. var net=require('net')
  2. var client=net.connect({port:3000},function(){
  3. console.log('客户端已连接');
  4. client.write('word\r\n');
  5. })
  6. client.on('data',function(data){
  7. console.log(data.toString());
  8. client.end();
  9. })
  10. client.on('end',function(){
  11. console.log('break up');
  12. })

类net.server 用于创建一个TCP或UNIX服务器,服务器本质上是一个可监听传入连接的net.Socket
server.listen(port,[host],[backlog],[callback]);
在指定端口port的主机host上开始接受连接,如果省略host则服务器会接受所有来自IPV4地址的连接,端口为0,则会使用分随机分配的端口
backlog为连接等待队列的最大长度
这是一个异步函数,当服务器被绑定时会触发listening事件,最后一个参数callback会被做listening事件的监听器

  1. server.on('error',function(e){
  2. if (e.code=='EADDRINUSE') {
  3. console.log('地址被占用,重试中……');
  4. setTimeout(function(){
  5. server.close();
  6. server.listen(PORT,HOST)
  7. }, 1000);
  8. };
  9. })

server.close([callback]);停止服务器接收新连接,但保持已有连接。是一个异步函数,服务器在所有连接结束后关闭,并发送close事件;
server.address()返回操作系统报告的绑定的地址,协议族和端口。对查找操作系统分配的地址哪个端口已被分配非常有用
server.unref()如果这是事件系统中唯一一个活动的服务器,调用unref将允许程序退出,如果服务器已被unref,再次调用无影响
server.ref()如果这是仅剩的服务器,在一个之前被unref的服务器上调用ref将不会让程序退出;
server.maxConnections这个选项能在服务器连接数超过数量时拒绝连接
server.getConnections(callback)异步获取服务器当前活跃的连接数,用于套接字被发给子进程;回调传入err,count两参数

事件listening,在服务器调用server.listen绑定后触发
事件connection在一个新连接被创建时触发,socket是一个net.socket的实例
事件close服务器被关闭时触发
事件error当错误发生时触发

类net.Socket
·这个对象是一个TCP或UNIX套接字的抽象。net.Socket实例实现了一个双工流接口。
·他们可以被用户使用在客户端(使用connect())或者由node创建;通过connection服务器事件传递给用户

new net.Socket([options]) //构造一个新的套接字对象
{ fd: null  //options对象
type: null 
allowHalfOpen: false}

socket.connect(port,[host],[connectListener]) //使用传入的套接字打开一个连接 如果port和host都被传入,那么套接字将会倍已TCP套接字打开。
socket.connect(path,[connectListener])
//socket.bufferSize 是一个net.Socket的属性,用于socket.write()用于帮助用户获取更快的运行速度。
//socket.setEncoding([encoding])
//socket.write(data,[encoding],[cb])在套接字上发送数据
//socket.end([data],[encoding])半关闭套接字
//soclet.destroy()确保没有i/o活动在这个套接字。只用在错误发生情况下需要
//socket.pause()暂停读取。“data”事件不会被触发。对于控制上传非常有用
//socket.resume()在调用pause()后恢复读操作
//socket.setTimeout(timeout,[cb])如果套接字超过timeout毫秒数处于闲置状态,则超时,套接字会接受到一个'timeout'事件,但连接不会断开,除非手动end(),destroy()
·callback参数将会被添加成为'timeout'事件的一次性监听器
//socket.setNoDelay([noDelay])//禁用nagle算法;
//socket.setKeepAlive([enable],[initialDelay]) 禁用/启用长连接功能;enable默认为false,
事件lookup ·这个事件在解析主机名之后,连接主机之前被分发。对UNIX套接字不适用。
事件connect
事件data收到数据被分发。data参数会是一个buffer或string对象。
事件end套接字的另一端发送FIN包时,该事件被分发。
事件timeout
事件drain 当写入缓冲被清空时产生。课被用于控制上传流量
事件error close
net.isIP(input)测试input是否为ip地址,无效字符串返回0;
net.isIPv4(input); net.isIPv6(input);返回true or false

罗列一下node api,有需要瞅两眼

nodejs的某些api~(三)net模块的更多相关文章

  1. Nodejs学习笔记(三)--- 模块

    目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...

  2. Nodejs学习笔记(三)—模块

    简介及资料 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名') ...

  3. nodejs入门API之net模块

    net常用API解析以及应用 手动解析HTTP请求头 基于网络模块net与文件模块fs搭建简易的node服务 net模块部分API参数详细解析 一.net常用API解析以及简单的应用 net模块的组成 ...

  4. 用JSON-server模拟REST API(三) 进阶使用

    用JSON-server模拟REST API(三) 进阶使用 前面演示了如何安装并运行 json server , 和使用第三方库真实化模拟数据 , 下面将展开更多的配置项和数据操作. 目录: 配置项 ...

  5. NodeJS学习笔记之Connect中间件模块(一)

    NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...

  6. maven小项目注册服务(三)--web模块

    java的web应用打包方式一般为war它和jar的区别就是包含了更多的资源和文件,如JSP文件,静态资源文件,servlet等等.war包的核心就WEB-INF文件夹下必须有一个web.xml 的配 ...

  7. NodeJS笔记(二)- 修改模块默认保存路径

    参考:nodejs prefix(全局)和cache(缓存)windows下设置 假设nodejs根目录为“D:\nodejs” 如下所示,新建“node_cache”文件夹用来存放全局缓存 该路径下 ...

  8. Express4.x API (三):Response (译)

    Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 完成 Express4.x API (二):request (译) -- 完成 ...

  9. vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版

    vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...

  10. java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))

    1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...

随机推荐

  1. js 判断字符串中是否包含某个字符串的方法实例

    String对象的方法 方法一: indexOf()   (推荐) var str = "123"; console.log(str.indexOf("3") ...

  2. 在Laravel中使用数据库事务以及捕获事务失败后的异常

    Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法.如果在事务的闭包内抛出异常,事务将会被自动还原.如果闭包运 ...

  3. 小程序获取当前页面URL

    var pages = getCurrentPages() //获取加载的页面 var currentPage = pages[pages.length-1] //获取当前页面的对象 var url ...

  4. 老男孩python学习自修第十一天【内置函数】

    1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...

  5. QTP键盘操作笔记

    micCtrlDwn  Presses the Ctrl key. micCtrlUp  Releases the Ctrl key. micLCtrlDwn  Presses the left Ct ...

  6. 生存模型(Survival Model)介绍

    https://www.cnblogs.com/BinbinChen/p/3416972.html 生存分析,维基上的解释是: 生存分析(Survival analysis)是指根据试验或调查得到的数 ...

  7. How to install Arch Linux

    fdisk -l mkfs.ext4 /dev/sdaX mount /dev/sdaX /mnt mkdir -p /mnt/boot/ mount /dev/sdaY /mnt/boot/ arc ...

  8. 安装zip版mysql

    MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C:\P ...

  9. 在 Web 页面中使用离线地图

    1. 所需工具&插件: 1. MapDownloader (提取码: spx6) 2. GISMysqlToLocalFile (提取码: vus6) 3. Leaflet 2. 操作: 1. ...

  10. 5.cgroup资源控制

    控制组( CGroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离.限制.审计等. 只有将分配到容器的资源进行控制,才能避免多个容器同时运行时对宿主机系统的资源竞争.每个控制组是一组 ...