zoukankan      html  css  js  c++  java
  • 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
    ');
        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
    ');
    })
    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,有需要瞅两眼

  • 相关阅读:
    Linux命令应用大词典-第11章 Shell编程
    Kubernetes 学习12 kubernetes 存储卷
    linux dd命令
    Kubernetes 学习11 kubernetes ingress及ingress controller
    Kubernetes 学习10 Service资源
    Kubernetes 学习9 Pod控制器
    Kubernetes 学习8 Pod控制器
    Kubernetes 学习7 Pod控制器应用进阶2
    Kubernetes 学习6 Pod控制器应用进阶
    Kubernetes 学习5 kubernetes资源清单定义入门
  • 原文地址:https://www.cnblogs.com/dh-dh/p/5087421.html
Copyright © 2011-2022 走看看