小天管理 发表于 2024年8月20日 发表于 2024年8月20日 link:https://github.com/FishOrBear/mTCP2 概述 mTCP 将多个 tcp 连接聚合成一个 tcp 连接,从而提高单 tcp 的速度.(在某些网络环境下有用,例如单 tcp 连接被 qos,而远端的服务端没有 qos,则可以使用). 原理 .---- 桥 1 ----. / \ 服务器 A --- mpclient -------桥 2 ------ mpserver --- 服务器 B \ / `---- 桥 3 ----` ref:https://github.com/greensea/mptunnel/blob/master/README.zh_CN.md 使用场景 你必须要有一个服务器,然后你到那个服务器的速度单 tcp 有限制,但是那个服务器的单 tcp 没有限制. 为什么写这个 现有的要么不能满足我的需求,要么部署太麻烦了. 特点 代码简单,核心 mTCP.js 代码包含注释只有 300 多行. 使用双工流实现了背压,合理控制了内存,并且连接能正常回收,不会内存泄漏. mtcp 内部自己接管连接池,不需要外部库,没有 node_modules,不需要 npm i mtcp 可以独立作为外部库使用,使用起来就和 net.Socket 一样. 因为增强了单线程的速度,所以在多线程 tcp 下,可能因为竞争关系,多线程的性能可能有略微下降. 如果连接因为网络问题被关闭,那么会自动使用另一个流. 可以使用多个出口地址(或者入口地址),实现多宽带聚合(或者备份). 可以简单修改代码,实现上下行流量分离,端口分离. 使用 服务端(请编辑 remote.js 修改你的配置端口) node remote.js 客户端(请编辑 client.js 修改你的配置端口) node client.js 常见问题 使用 jemalloc 避免 nodejs 内存碎片 apt-get install -y libjemalloc-dev RUN echo "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2" >> /etc/ld.so.preload 使用 pm2 守护进程 //mtcp.config.js module.exports = { /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ */ apps: [ { name: 'mtcp', script: './remote.js', args: "", autorestart: true, cron_restart: '0 6 * * *',//每天 6 点重启 watch: ["./"], // max_memory_restart: "300M", error_file: "./logs/mtcp_err.log", out_file: "./logs/mtp_out.log", time: true, log_date_format: "YYYY-MM-DD HH:mm Z", env: { "NODE_ENV": "production" } // node_args: ["--max_old_space_size=128", "--max_semi_space_size=4"], }, ] }; 性能测试 没有 mTCP 单线程 tcp 20m/s 有 mTCP 情况下 连接数:5 20Mb/s ,164Mbps 93Mb/s ,745Mbps 36Mb/s ,293Mbps 44Mb/s ,358Mbps 54Mb/s ,435Mbps 62Mb/s ,499Mbps 68Mb/s ,546Mbps 66Mb/s ,531Mbps 61Mb/s ,489Mbps 86Mb/s ,689Mbps 106Mb/s ,853Mbps 38Mb/s ,305Mbps 13Mb/s ,106Mbps 28Mb/s ,226Mbps 连接数:4 15Mb/s ,121Mbps 67Mb/s ,537Mbps 72Mb/s ,583Mbps 75Mb/s ,602Mbps 61Mb/s ,495Mbps 60Mb/s ,480Mbps 79Mb/s ,635Mbps 76Mb/s ,614Mbps 62Mb/s ,500Mbps 49Mb/s ,396Mbps 62Mb/s ,499Mbps 26Mb/s ,211Mbps 连接数:3 14Mb/s ,114Mbps 54Mb/s ,432Mbps 56Mb/s ,450Mbps 56Mb/s ,448Mbps 59Mb/s ,472Mbps 56Mb/s ,453Mbps 56Mb/s ,451Mbps 56Mb/s ,452Mbps 59Mb/s ,479Mbps 55Mb/s ,440Mbps 62Mb/s ,497Mbps 32Mb/s ,262Mbps 58Mb/s ,468Mbps 56Mb/s ,450Mbps 参考(类似项目) https://github.com/wsmlby/mtcp (有问题,连接池太多,内存问题,出错) mptcp(不能加速) https://github.com/mtcp-stack/mtcp (部署好复杂) https://github.com/greensea/mptunnel (udp,udp 明显不大好 现在运营商 qos 了)
已推荐帖子