CnSwift - 雨燕

agile development - 敏捷开发

Node.js创建Web服务器和TCP服务器

Node.js创建Web服务器和TCP服务器

使用http模块创建Web服务器

Web服务器的功能:

  • 接受HTTP请求(GET、POST、DELETE、PUT、PATCH)
  • 处理HTTP请求(自己处理,或请求别的程序处理)
  • 做出响应(返回页面、文件、各类数据等)

常见的Web服务器架构:

  • Nginx / Apache:负责接受HTTP请求,确定谁来处理请求,并返回请求结果
  • php-fpm / php模块:处理分配给自己的请求,并将处理结果返回给分配者

常见请求种类:

  • 请求文件:包括静态文件(网页、图片、前端JavaScript文件、CSS文件……),及由程序处理得到的文件

  • 完成特定的操作:如登录、获取特定数据等
    Node.js的Web服务器:

  • 不依赖其它特定的Web服务器软件(如Apache、Nginx、IIS……)

  • Node.js代码处理请求的逻辑

  • Node.js代码负责Web服务器的各种“配置”

使用Node.js核心模块http创建Web服务器

1
2
3
4
5
6
7
8
9
10
11
12
// 引用核心模块http
var http = require('http');
// 请求方法定义为变量
var requestHandler = function(req, res){
res.end('hello');
};
// 创建Web服务器实例
var web = http.createServer(requestHandler);
// 监听端口
web.listen(18000);
// 打印
console.log('http running on http://localhost:18000');

补充:退出Node:control+C

使用Express创建Web服务器

简单的Express服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
// 引入express模块
var express = require('express');
// 实例化
var app = express();
// 路由
app.get('/', function(req, res){
res.end('hello\n');
});
// 监听端口
app.listen(18001, function afterListen(){
// 打印
console.log('express running on http://localhost:18001');
});

模板创建应用:

  1. 使用cnpm全局安装express-generatorcnpm install -g express-generator

  2. 创建应用express expressHello

  3. 安装模块npm install

静态文件服务

(1)静态文件范围:

  1. 网页
  2. 纯文本
  3. 图片
  4. 前端JavaScript代码
  5. CSS样式表文件
  6. 媒体文件
  7. 字体文件

(2)使用Express创建静态文件服务器// 引入express模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var express = require('express');
// 实例化
var app = express();
// 中间件
app.use(express.static('./public'));
// 路由
app.get('/', function(req, res){
res.end('hello\n');
});
// 监听端口
app.listen(18001, function afterListen(){
// 打印
console.log('express running on http://localhost:18001');
});

路由

三种路由方法:

  1. path

    优点:简单

  2. Router

    优点:比较适合定义同一路由下的多个子路由

  3. route

    优点:比较适合定义RESTful API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 引入express模块
var express = require('express');
// 实例化
var app = express();
// 中间件
app.use(express.static('./public'));
// 路由
app.get('/', function(req, res){
res.end('hello\n');
});

var Router = express.Router();
/*
http://example.com/post/add
http://example.com/post/list
*/
Router.get('/add', function(req, res){
res.end('Router /add\n');
});
Router.get('/list', function(req, res){
res.end('Router / list\n');
});
app.use('/post', Router);

app.route('./article')
.get(function(req, res){
res.end('route /article get\n');
})
.post(function(req, res){
res.end('route /article post\n');
})

// http://example.com/news/123
app.param('newsId', function(req, res, next, newsId){
req.newsId = newsId;
next();
});

app.get('/news/:newsId', function(req, res){
res.end('newsId: ' + req.newsId + '\n');
});
// 监听端口
app.listen(18001, function afterListen(){
// 打印
console.log('express running on http://localhost:18001');
});

中间件

  • Connect:Node.js的中间件框架

  • 分层处理

  • 每层实现一个功能

    创建TCP服务器

  • 使用net模块创建TCP服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var net = require('net');

    const PORT = 18001;
    const HOST = '127.0.0.1';

    var clientHandler = function(socket){
    console.log('someone connected');
    // 事件监听
    socket.on('data', function dataHandler(data){
    console.log(socket.remoteAddress, socket.remotePort, 'send', data.toString());
    socket.write('server received\n');
    });

    socket.on('close', function(){
    console.log(socket.remoteAddress, socket.remotePort, 'disconnected');
    })
    };
    var app = net.createServer(clientHandler);
    app.listen(PORT, HOST);
    console.log('tcp server running on tcp://', HOST, ':' , PORT);
  • 使用telnet连接TCP服务器

  • 使用net创建TCP客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var net = require('net');

    const PORT = 18001;
    const HOST = '127.0.0.1';

    var tcpClient = net.Socket();

    tcpClient.connect(PORT, HOST, function(){
    console.log('connect success.');
    tcpClient.write('this is tcp client by Node.js');
    });
更多精彩内容,请关注公众号 Golang语言开发栈公众号二维码
感谢赞赏.

Welcome to my other publishing channels