IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> NodeJS开发web应用程序之http,express,socket.io介绍 -> 正文阅读

[网络协议]NodeJS开发web应用程序之http,express,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。
一般情况下推荐引用动态生成的客户端文件,因为这样客户端和服务端的版本可以保持一致,减少出错的几率。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:35:43  更:2021-07-27 16:38:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:50:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码