nodejs的某些api~(三)net模块

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();

var net=require(‘net‘);
var server=net.createrSever(function(c){
    console.log(‘服务区已连接‘);
    c.on(‘end‘,function(){
          console.log(‘服务器断开‘);
     })
    c.write(‘hello\r\n‘);
    c.pipe(c);
}).listen(3000,function(){
     console.log(‘服务器绑定在3000端口‘);
})

一个简单的例子,向连接的客户端写入hello。

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

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

var net=require(‘net‘)
var client=net.connect({port:3000},function(){
    console.log(‘客户端已连接‘);
    client.write(‘word\r\n‘);
})
client.on(‘data‘,function(data){
    console.log(data.toString());
    client.end();
})
client.on(‘end‘,function(){
    console.log(‘break up‘);
})

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

server.on(‘error‘,function(e){
    if (e.code==‘EADDRINUSE‘) {
        console.log(‘地址被占用,重试中……‘);
        setTimeout(function(){
            server.close();
            server.listen(PORT,HOST)
        }, 1000);
    };
}) 

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,有需要瞅两眼

时间: 2024-11-08 09:18:59

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

nodejs入门API之net模块

net常用API解析以及应用 手动解析HTTP请求头 基于网络模块net与文件模块fs搭建简易的node服务 net模块部分API参数详细解析 一.net常用API解析以及简单的应用 net模块的组成部分: net.connect()实际上是net.createConnection()的别名,还有一个基于net模块子类的new net.socket()构造方法也具备相同的功能,都是用来创建一个新的客户端连接对象. net.createServer()同样有一个基于net模块子类的new net.

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

java的web应用打包方式一般为war它和jar的区别就是包含了更多的资源和文件,如JSP文件,静态资源文件,servlet等等.war包的核心就WEB-INF文件夹下必须有一个web.xml 的配置文件,子目录classes包含所有该项目的类,子目录lib包含所有的依赖,这两个目录都会在运行的时候添加到classpath下. maven对于web项目有统一的格式.项目代码和资源还是放在src/main/java和src/main/resources下,web资源目录在src/main/web

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

Express4.x API (一):application (译) -- 进行中 Express4.x API (二):request (译) -- 完成 Express4.x API (三):Response (译) -- 完成 Express4.x API (四):router (译) -- 进行中 写在前面 技术库更迭较快,很难使译文和官方的API保持同步,更何况更多的大神看英文和中文一样的流畅,不会花时间去翻译--,所以我们看到express中文网更多的还是英文,我们只有提升自己的英语

【转】Nodejs学习笔记(三)--- 事件模块

目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.once(event, listener) emitter.removeListener(event, listener) emitter.removeAllListeners([event]) emitter.listeners(event) emitter.setMaxListeners(n) 其它

nodejs入门API之fs模块

fs模块下的类与FS常量 fs模块下的主要方法 fs的Promise API与FileHandle类 一.fs模块下的类 1.1 fs.Dir:表示目录流的类,由 fs.opendir().fs.opendirSync() 或 fsPromises.opendir() 创建. 1.2 fs.Dirent:目录项的表现形式,通过从fs.Dir中读取返回. 1.3 fs.FSWatcher:继承自 <EventEmitter>,调用 fs.watch() 方法返回该对象.每当指定监视的文件被修改时

nodejs入门API之url模块+querystring模块

关于URL的一些基础内容 URL模块的API解析 URL的参数URLSearchParams类 querystring模块 一.关于URL的一些基础内容 1.1 定义: 在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址. 1.2 URL的组成部分:(以下面这个URL为例) http://www.baidu.com:8080/news/index.asp?boar

nodejs入门API之path模块

Path模块在各个系统上的差异 Path模块API解析 一.Path模块在各个系统上的差异 path模块提供用于处理文件路径和目录路径的使用工具. let path = require('path') 由于node.js应用程序运行所在的系统不一样会导致path获取的路径风格不一致.比如windows与Unix上的POSIX系统操作接口就会有如下差别: //比如path.basename()获取路径最后一部分的差异 path.basename('C:\\temp\\myfile.html');

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

前面演示了如何安装并运行 json server, 和使用第三方库真实化模拟数据 , 下面将展开更多的配置项和数据操作. 配置项 在安装好json server之后,通过 json-server -h可以看到如下配置项: json-server [options] <source> Options: --config, -c 指定 config 文件 [默认: "json-server.json"] --port, -p 设置端口号 [default: 3000] --ho

NODE.JS API —— Modules(模块)

// 说明 Node API 版本为 v0.10.31.    中文参考:http://nodeapi.ucdok.com/#/api/,http://blog.sina.com.cn/oleoneoy 本段为博主注解. 目录 ● 模块    ○ Cycles    ○ Core Modules    ○ File Modules    ○ Loading from node_modules Folders    ○ Folders as Modules    ○ Caching ■ Modul