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是一个stream流,巧用pipe,将输入写到输出,实际等于:
c.on("data",function(data){
c.write(data);
})
c.on("end",function(){
c.end();
})
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,有需要瞅两眼
nodejs的某些api~(三)net模块的更多相关文章
- Nodejs学习笔记(三)--- 模块
目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...
- Nodejs学习笔记(三)—模块
简介及资料 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名') ...
- nodejs入门API之net模块
net常用API解析以及应用 手动解析HTTP请求头 基于网络模块net与文件模块fs搭建简易的node服务 net模块部分API参数详细解析 一.net常用API解析以及简单的应用 net模块的组成 ...
- 用JSON-server模拟REST API(三) 进阶使用
用JSON-server模拟REST API(三) 进阶使用 前面演示了如何安装并运行 json server , 和使用第三方库真实化模拟数据 , 下面将展开更多的配置项和数据操作. 目录: 配置项 ...
- NodeJS学习笔记之Connect中间件模块(一)
NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...
- maven小项目注册服务(三)--web模块
java的web应用打包方式一般为war它和jar的区别就是包含了更多的资源和文件,如JSP文件,静态资源文件,servlet等等.war包的核心就WEB-INF文件夹下必须有一个web.xml 的配 ...
- NodeJS笔记(二)- 修改模块默认保存路径
参考:nodejs prefix(全局)和cache(缓存)windows下设置 假设nodejs根目录为“D:\nodejs” 如下所示,新建“node_cache”文件夹用来存放全局缓存 该路径下 ...
- Express4.x API (三):Response (译)
Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 完成 Express4.x API (二):request (译) -- 完成 ...
- vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...
- java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...
随机推荐
- C#设计模式之5:简单工厂和工厂方法模式
工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...
- 源码追踪,解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries.问题
在windows系统本地运行spark的wordcount程序,会出现一个异常,但不影响现有程序运行. >>提君博客原创 http://www.cnblogs.com/tijun/ & ...
- switch-case和if-else可互换时
当switch-case和if-else可互换时,应当优先采用switch-case.因为switch-case的效率更高(详情下回分解).
- 如何使用 Yum Repository 安装指定版本的 MySQL
自从从使用 debian 系的 apt-get 转到使用 yum 工具之后一直不是很习惯,也没有去看过很多工具包安装的时候到底影响到了哪些文件等.这次借这次社区版 MySQL 安装来一并梳理一下. 首 ...
- python学习笔记(10)--组合数据类型(集合类型)
集合类型 集合是多个元素的无序组合,每个元素唯一,不存在相同类型,每个元素是不可变类型.用{}表示,元素间用逗号分隔.建立结合类型用{},或set函数,如果是空集合必须用set. >>&g ...
- java sort排序原理
事实上Collections.sort方法底层就是调用的Arrays.sort方法,而Arrays.sort使用了两种排序方法,快速排序和优化的归并排序. 快速排序主要是对那些基本类型数据(int,s ...
- PHPStorm 配置命名空间
文件-设置-Directories 选中:application 点击顶部:Sources,右侧会出现 Source Floders 配置项 点击:p进行设置 输入app\
- window.location.href ie 不兼容问题
今天再做项目演示的时候,用的是ie浏览器报错404,项目都运行好久了,第一次用ie就这样了悲剧,贴下解决方法吧 function getContextPath() { var pathName = d ...
- jqprint控件使用
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license //@ sourceMappingURL ...
- 比特币中的Base58 编码
base58和base64一样是一种二进制转可视字符串的算法,主要用来转换大整数值.区别是,转换出来的字符串,去除了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母 ...