zoukankan      html  css  js  c++  java
  • 网络模块(net, http)小解

    net模块可用来创建TCP服务器来接收网络请求,它提供了创建客户端以及服务端的方法

    服务端:

    创建服务器:

    net.createServer([,options], connectionListener)

    option 默认值 {allowHalfOpen: false, pauseOnConnect: false}

    connectionListener创建服务器时自动为connection事件添加监视器

    eg:

    var net = require('net');
    //创建服务端对象server,为connection事件添加监视器,socket是服务端的socket对象
    var server = net.createServer(function(socket) { //'connection' listener console.log('client connected'); socket.on('end', function() { console.log('client disconnected'); });
     //传给客户端 socket.write(
    'hello '); socket.pipe(socket); });
    //为listening事件添加监视器 server.listen(
    8124, function() { //'listening' listener console.log('server bound'); });

    也可以写作:

    var net = require('net');
    var server = net.createServer();
    
    server.on('connection', function(socket){
      console.log('client connected');
      console.log(socket);
      //客户端断开连接时触发
      socket.on('end', function() {
        console.log('client disconnected');
      });
      //客户端输出
      socket.write('hello
    ');
      socket.pipe(socket);
    })
    //'listening' 事件监听器,监听端口成功时触发
    server.listen(8124, function() { 
      console.log('server bound');
    });

    服务端(server)事件如下:

    listening: 绑定端口

    connection: 每个客户端socket连接到服务器时触发

    close: 服务端关闭

    error: 服务端发生异常

    ---------------------------------

    连接事件(socket)如下:

    data: 当一端调用write()发送数据时,另一端触发

    end: 当连接中任意端发送了FIN数据,两端都触发

    connect: 用于客户端,socket与服务端连接成功时触发

    drain: 任一端调用write()时,当前这端触发

    error: 异常发生

    close: socket完全关闭

    timeout: 当一定时间后连接不再活跃是触发,通知用户此连接以被闲置

    ******************************************************************************************

    客户端:

    创建客户端,连接服务端

    net.connect(options, [, connectionListener])

    options:

    port 客户端连接到port的端口,必填

    host 客户端连接到的主机,默认localhost

    eg:

    var net = require('net');
    //client是一个socket对象
    var client = net.connect({port: 8124},
      //connect监视器
    function() { console.log('connected to server!'); client.write('world! '); //服务端的hello会在world之前输出 }); client.on('data', function(data) { console.log(data.toString()); client.end(); }); client.on('end', function() { console.log('disconnected from server'); });

    备注: socket是一个可读可写的stream对象,Tcp协议是面向连接的

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    http

    创建服务器:

    http.createServer([requestListener])

    eg:

    var http= require("http");
    http.createServer(function(req, res){
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World
    ');
    }).listen(1337, '127.0.0.1');

    解析:

    请求部分(req), 请求头信息:

    req.method 请求类型

    req.url url地址

    req.httpVersion http协议版本

    req.headers: 请求头信息里的请求头对象(headers)

    类型: 只读流

    响应部分(res):

    res.writeHead()分为res.setHeader()与res.writeHead()两部分,两者都是定义头信息,但只有调用后者时才会写入连接

    res.write(),res.end()都是定义文体部分,后者会发送信号告知服务器这次响应结束

    *********************************************************************************************************

    创建客户端

    http.request(options, connect)

    eg:

    var options= {
        hostname: "127.0.0.1",
        port: 1334,
        path: "/",
        method: "GET"
    };
    var req= http.request(options, function(res){
        console.log(res.statusCode);
        console.log("HEADERS:"+ JSON.stringify(res.headers));
        res.serEncoding('utf8');
        res.on("data", function(chunk){
            console.log(chunk);
        })
    });
    res.end();

    options包含请求头信息,包括

    host: 服务器域名或IP地址,默认localhost

    hostname: 服务器名称

    port: 服务器端口

    ...

    headers:请求头对象

    request的write(),end()与浏览器的ajax调用几近相同

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    hyperV 虚拟机的创建和内存管理
    诡异~~ASP.NET 程序 无法上传文件 (这个..自己大意造成的嘛~~)
    多线程扫描,多线程采集, ftpscan.NET
    ASP.NET 调试
    Hyperv 如何使用WMI向虚拟计算机附加硬盘
    VS2008SP1显示中文版的智能感知提示信息
    NGIX
    python3的linux环境编译安装
    NGIX之项目布署
    android之自定义ViewGroup和自动换行的布局的实现(支持按钮间隔)
  • 原文地址:https://www.cnblogs.com/yanze/p/6093251.html
Copyright © 2011-2022 走看看