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 ...
随机推荐
- js 判断字符串中是否包含某个字符串的方法实例
String对象的方法 方法一: indexOf() (推荐) var str = "123"; console.log(str.indexOf("3") ...
- 在Laravel中使用数据库事务以及捕获事务失败后的异常
Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法.如果在事务的闭包内抛出异常,事务将会被自动还原.如果闭包运 ...
- 小程序获取当前页面URL
var pages = getCurrentPages() //获取加载的页面 var currentPage = pages[pages.length-1] //获取当前页面的对象 var url ...
- 老男孩python学习自修第十一天【内置函数】
1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...
- QTP键盘操作笔记
micCtrlDwn Presses the Ctrl key. micCtrlUp Releases the Ctrl key. micLCtrlDwn Presses the left Ct ...
- 生存模型(Survival Model)介绍
https://www.cnblogs.com/BinbinChen/p/3416972.html 生存分析,维基上的解释是: 生存分析(Survival analysis)是指根据试验或调查得到的数 ...
- 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 ...
- 安装zip版mysql
MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C:\P ...
- 在 Web 页面中使用离线地图
1. 所需工具&插件: 1. MapDownloader (提取码: spx6) 2. GISMysqlToLocalFile (提取码: vus6) 3. Leaflet 2. 操作: 1. ...
- 5.cgroup资源控制
控制组( CGroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离.限制.审计等. 只有将分配到容器的资源进行控制,才能避免多个容器同时运行时对宿主机系统的资源竞争.每个控制组是一组 ...