nodejs内网穿透

说明

本地服务注册,基于子域名->端口映射。公网测试请开启二级或三级域名泛解析

无心跳保活、无多线程并发处理

服务器端

  • 请求ID基于全局变量,不支持PM2多进程开服务端。(多开请修改uid函数,增加网卡以及进程信息)
  • 该代码包含HTTP代理和内网穿透服务端
const net = require('net');
var nat = {
    config: {servPort: 39001,natPort: 80,proxy:39002},
    registry: {},//服务注册表
    request: {},//请求连接
    uid(pre = '', howMany = 1, len = 4) {
        if (howMany > 9999) return false;
        var date = new Date();
        var str = date.getFullYear();
        str += ('0' + (date.getMonth() + 1)).slice(-2);
        str += ('0' + date.getDate()).slice(-2);
        str += ('0' + date.getHours()).slice(-2);
        str += ('0' + date.getMinutes()).slice(-2);
        str += ('0' + date.getSeconds()).slice(-2);
        if (!this.num || this.num.time !== str)
            this.num = { time: str, counter: 0 }
        let bd = [];
        for (var i = 0; i < howMany; i++) {
            this.num.counter++;
            var buffNum = (Array(len).join(0) + this.num.counter).slice(len * (-1));
            bd.push(pre + str + buffNum);
        }
        return bd.length > 1 ? bd : bd[0];
    },
    run(){
        this.nat()
        this.