返回顶部
首页 > 资讯 > 前端开发 > html >如何实现长连接的express
  • 726
分享到

如何实现长连接的express

2024-04-02 19:04:59 726人浏览 安东尼
摘要

这篇文章主要介绍了如何实现长连接的express,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。逻辑: 首先把routerUrl目录下的函数初

这篇文章主要介绍了如何实现长连接的express,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

逻辑: 首先把routerUrl目录下的函数初始化缓存起来,通过Router.request调用缓存起来的函数,这个函数实际上是reGISter.set方法,主要是开始运行函数链,通过register.next 运行下一个函数。

函数流 main.js --> Router.request --> register.set --> register.next --> sock.write

main.js

'use strict';
const routerUrl = 'router'; // 当前目录下的router地址
const Router = require('./net/Router'); // 初始化路由
const net = require('net');
const port = '3000';
Router.init(routerUrl);
const app = sock => {
  sock.on('data', function (data) {
    try {
      Router.request(data, sock);
    } catch (error) {
      console.log(error)
    }
  });

  sock.on('error', (err) => {
    console.log(err)
  })

  // 为这个Socket实例添加一个"close"事件处理函数
  sock.on('close', function (data) {
    console.log('clone')
  })
}
const server = net.createServer(app);

server.listen(port, () => {
  console.log(`Startu in env ${process.env.node_ENV || 'development'} on port ${port}`);
});

server.on('error', (err) => {
  console.log(err)
})

路由加载:

Router.js文件

const fs = require('fs');
const _ = require('lodash');
var path = require("path");
var ROOT_PATH = path.resolve(__dirname);
class Router {
  constructor() {
    this.routeMap = {};
  }
  
  init(routerUrl) {
    let files = fs.readdirSync(path.join(ROOT_PATH, `../${routerUrl}`));
    return _.reduce(files, (config, file) => {
      let svc = require(path.join(ROOT_PATH, `../${routerUrl}/${file}`));
      this.routeMap = {
        [file.split('.')[0]]: svc.get()
      };
    }, {})
  }
  
  request(data, sock) {
    try {
      this.routeMap[result.url.split('/')[1]][result.url.replace(`/${result.url.split('/')[1]}`, '')](data, sock);
    } catch (error) {
      sock.write(error);
    }
  }
}

module.exports = new Router();

中间件:

register.js文件

const Next = require('./next');

class Register {
  constructor() {
    this._init = {};
  }
  <!-- 初始化router函数,开始运行函数链 -->
  set(url, ...handlers) {

    this._init[url] = async (data, sock) => {
      try {
        let next = new Next(handlers);
        next.run(data, sock);  
      } catch (error) {
        sock.write(error);
      }
    };
  }
  <!-- 获取初始化的router函数 -->
  get() {
    return this._init;
  }
}

module.exports = new Register();

nest.js文件

class Next {
  constructor(stack) {
    this.index = 0;
    this.stack = stack;
    this.data = null;
    this.sock = null;
  }
  <!-- 运行中间件 -->
  run(data, sock) {
    this.data = data;
    this.sock = sock;
    this.stack[this.index](data, sock, this.next.bind(this));
  }
  <!-- 调到下一个中间件,若带参数就跳到第arguments[0]步 -->
  next() {
    if (arguments[0] && arguments[0] === +arguments[0] && +arguments[0] < this.stack.length) {
      this.index = +arguments[0];
      return this.run(data, this.sock);
    }
    this.index++;
    this.run(this.data, this.sock);
  }
}

module.exports = Next;

注册文件

const init = require('../net/register');

init.set('/test',
  (data, sock, next) => {
    next()
  },
  async (data, sock) => {
    try {
      sock.write(test);
    } catch (e) {
      sock.write(e);
    }
  });

感谢你能够认真阅读完这篇文章,希望小编分享的“如何实现长连接的express”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网html频道,更多相关知识等着你来学习!

--结束END--

本文标题: 如何实现长连接的express

本文链接: https://lsjlt.com/news/71004.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何实现长连接的express
    这篇文章主要介绍了如何实现长连接的express,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。逻辑: 首先把routerUrl目录下的函数初...
    99+
    2024-04-02
  • nodejs如何实现长连接
    Node.js是一个非常流行的服务器端JavaScript运行环境。它在网络编程方面表现出色,尤其是在实现长连接方面。在网络编程中,长连接是指客户端和服务器之间保持心跳活动,不关闭连接的状态。与传统的HTTP请求-响应模式相比,长连接可以提...
    99+
    2023-05-14
  • 如何使用node和express连接mysql实现登录注册
    这篇文章将为大家详细讲解有关如何使用node和express连接mysql实现登录注册,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数据库我选了比较“正式”的MySQL,...
    99+
    2024-04-02
  • 如何理解HTTP的长连接和短连接
    这篇文章主要讲解了“如何理解HTTP的长连接和短连接”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解HTTP的长连接和短连接”吧!HTTP长连接和短连...
    99+
    2024-04-02
  • 聊聊Golang实现长连接的方案
    随着互联网的发展,实时通讯需求越来越高,长连接技术也变得越来越重要。Golang是一门功能强大的编程语言,其出众的并发性能和高效的垃圾回收机制使其成为了很多互联网公司的首选语言。本文将介绍Golang实现长连接通讯的方案。一、什么是长连接长...
    99+
    2023-05-14
  • 如何使用Go语言实现Websocket长连接保持
    如何使用Go语言实现Websocket长连接保持Websocket是HTML5提供的一种协议,可以实现服务器与客户端之间的双向通信。在实际开发中,很多场景需要保持长连接,以便实时推送数据或实现即时通讯功能。本文将介绍如何使用Go语言实现We...
    99+
    2023-12-14
    Go语言 websocket 长连接保持
  • JAVA实现心跳检测(长连接)
    目录1、心跳机制简介2、心跳机制实现方式3、客户端4 、服务端5、代码实现5.1 KeepAlive.java5.2 MyClient.java5.3 MyServer5.4 测试结...
    99+
    2023-03-01
    JAVA 心跳检测
  • 用node和express连接mysql实现登录注册的实现代码
    为了数据库课设,打算后台用node搭建,前台用vue搞个博客出来(因为前段时间在学啊)。本来node不想用框架,喜欢先打好基础的,奈何3个星期要把他做完和应付各种考试,所以最后还是用了express,大大简...
    99+
    2022-06-04
    代码 node express
  • python如何使用socket实现TCP协议长连接框架
    这篇文章主要介绍了python如何使用socket实现TCP协议长连接框架,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。分析多了协议就会发现,很多的应用,特别是游戏类和IM类...
    99+
    2023-06-29
  • ajax如何实现服务器与浏览器长连接的功能
    小编给大家分享一下ajax如何实现服务器与浏览器长连接的功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下<script type=&qu...
    99+
    2023-06-08
  • PHP如何实现web socket长链接
    本文小编为大家详细介绍“PHP如何实现web socket长链接”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP如何实现web socket长链接”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • Vue+WebSocket页面实时刷新长连接的实现
    最近vue项目要做数据实时刷新,折线图每秒重画一次,数据每0.5秒刷新一次,说白了就是实时刷新,因为数据量较大,用定时器估计页面停留一会就会卡死。。。 与后台人员讨论过后决定使用h5...
    99+
    2024-04-02
  • Express连接MySQL及数据库连接池技术实例
    目录Express连接MySQL准备工作创建配置文件创建操作数据库的接口文件数据库连接池技术什么是数据库连接池数据库连接池的作用是什么?数据库连接池技术实例1、导入mysql模块2、...
    99+
    2024-04-02
  • 如何理解MySQL性能优化:长连接、短连接、连接池
    本篇内容介绍了“如何理解MySQL性能优化:长连接、短连接、连接池”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • ssl连接是如何实现的
    SSL连接是通过使用SSL(安全套接字层)协议来实现的。以下是实现SSL连接的主要步骤:1. 客户端发送连接请求到服务器。服务器必须...
    99+
    2023-09-09
    ssl
  • 如何使用将新浪长连接转为短连接的API
    这篇文章将为大家详细讲解有关如何使用将新浪长连接转为短连接的API,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。新浪短网址api是新浪官方对外公开的长链接转为短链接的API,可以将冗长的链接地址缩短生成 ...
    99+
    2023-06-02
  • 如何主动断开mysql长连接
    这篇文章将为大家详细讲解有关如何主动断开mysql长连接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何主动断开mysql长连接1.进入mysql端2.点...
    99+
    2024-04-02
  • linux如何查看长连接状态
    在Linux上,可以使用`netstat`命令来查看长连接状态。使用`netstat`命令的常用选项有:- `-a`:显示所有连接和...
    99+
    2023-08-09
    linux
  • WebSocket中怎么利用OkHttp实现长连接
    WebSocket中怎么利用OkHttp实现长连接,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WebSocket介绍先简单介绍下WebSoc...
    99+
    2024-04-02
  • mysql内连接如何实现
    这篇文章给大家分享的是有关mysql内连接如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。连接分为:内连接、外连接、交叉连接。今天我们来学习一下,如何用MySQL建立内连接...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作