NodeJS开发web应用程序之http,express,socket.io介绍

2023-05-16

文章目录

    • NodeJS开发web应用程序之http,express,socket.io介绍
      • 1. http
      • 2. express
      • 3. socket.io

NodeJS开发web应用程序之http,express,socket.io介绍

1. http

Node中提供的http模块,其中封装了http服务器和http客户端,http.Server和http.request。
Q:如何用http创建http服务器?

var server = require('http').createServer(handler)
//var server = require('http').Server(handler) //the same
server.listen(8080);

function handler(req, rep) {
   rep.writeHead(200, {'Content-Type': 'text/html'});    
   // 响应文件内容
   rep.write("hello world");        
   // 发送响应数据
   rep.end();

   //rep.end("hello world"); //the same
}

使用Server和createServer都可以创建http服务实例

2. express

基于Node.JS的web应用程序开发框架,内部集成了模版引擎,路由,中间件(应用层中间件/路由中间件/错误中间件),功能非常强大,是一个比较灵活的web框架,express框架简单封装了node的http模块, 当然我们也可以为express提供外置的http服务,这样做到express框架完成各种路由响应的工作,外部服务可以比较灵活,可以是http服务,也可以是https服务。

使用express内置http服务:

var app = require('express')();
app.listen(8080);

app.get('/', function(req, res) {
    res.status(200).send("hello world");
});

使用外部http服务:

var app = require('express')();
var server = require('http').createServer(app);
//var server = require('http').Server(app); //the same
server.listen(8081);

app.get('/', function(req, res) {
    res.status(200).send("hello world");
});

var app = require('express')()返回的是一个并不是一个服务,其实,app就是一个 function(req, res){},同时具备一个属性app.listen() = function (port){ http.createServer(this).listen(port); },listen返回才是一个真正的http服务实例。

小插曲:Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 和express比较起来更轻量(不捆绑任何中间件),更现代(使用async+promise取代回调函数,增强错误处理)

新版本express抛弃了express.createServer(), 变成了express()
推荐使用4.x, 不再使用2.x和3.x

3. socket.io

socket.io是基于Node.JS和WebSocket协议的实时通信开源框架,包括了客户端的js和服务器端的nodejs,它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,也就是如果浏览器不支持websocket,会降级与long pooling实现实时通信。

socket.io与http使用同一端口
服务端代码:

var app = require('express')()
var server = require('http').createServer(app)
var io = require('socket.io')(server)
server.listen(8080)

app.use(require('express').static("."));

io.on('connection', function(socket){
    console.log("client", socket.id, "is connected.");
    socket.on("disconnect", function () {
        console.log("client", socket.id, "is disconnected.");
    });
});

客户端代码:

<!DOCTYPE html>
<html>
    <head>
        <title>socket.io</title>
    </head>
    <body>
        <h1>socket.io</h1>
        <h2>hello socket.io</h2>

        <script src="/socket.io/socket.io.js"></script>
        <!-- <script src="node_modules/socket.io/client-dist/socket.io.min.js"></script> -->
        <script>
            var socket = io("http://localhost:8080");
            socket.on("handshake", function(data) {
                console.log(data);
                socket.emit('client event', {"hello": "world"});
            });
        </script>
    </body>
</html>

注意,客户端socket.io.js引用方式有两种,
#1 动态方式,服务端运行后会在根目录动态生成socket.io的客户端js文件,客户端可以通过固定路径/socket.io/socket.io.js添加引用。
#2 静态方式, <script src="node_modules/socket.io/client-dist/socket.io.min.js"></script>,也可以引用CDN。
一般情况下推荐引用动态生成的客户端文件,因为这样客户端和服务端的版本可以保持一致,减少出错的几率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS开发web应用程序之http,express,socket.io介绍 的相关文章

随机推荐