跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[分享创造] 全新实现的 mTCP(nodejs) 使用多条 tcp 连接来提高 tcp 连接速度


小天管理

已推荐帖子

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 没有限制.

为什么写这个

现有的要么不能满足我的需求,要么部署太麻烦了.

特点

  1. 代码简单,核心 mTCP.js 代码包含注释只有 300 多行.
  2. 使用双工流实现了背压,合理控制了内存,并且连接能正常回收,不会内存泄漏.
  3. mtcp 内部自己接管连接池,不需要外部库,没有 node_modules,不需要 npm i
  4. mtcp 可以独立作为外部库使用,使用起来就和 net.Socket 一样.
  5. 因为增强了单线程的速度,所以在多线程 tcp 下,可能因为竞争关系,多线程的性能可能有略微下降.
  6. 如果连接因为网络问题被关闭,那么会自动使用另一个流.
  7. 可以使用多个出口地址(或者入口地址),实现多宽带聚合(或者备份).
  8. 可以简单修改代码,实现上下行流量分离,端口分离.

使用

  1. 服务端(请编辑 remote.js 修改你的配置端口)
node remote.js
  1. 客户端(请编辑 client.js 修改你的配置端口)
node client.js

常见问题

  1. 使用 jemalloc 避免 nodejs 内存碎片
apt-get install -y libjemalloc-dev
RUN echo "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2" >> /etc/ld.so.preload
  1. 使用 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

参考(类似项目)

  1. https://github.com/wsmlby/mtcp (有问题,连接池太多,内存问题,出错)
  2. mptcp(不能加速)
  3. https://github.com/mtcp-stack/mtcp (部署好复杂)
  4. https://github.com/greensea/mptunnel (udp,udp 明显不大好 现在运营商 qos 了)
意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

  • 游客注册

    游客注册

  • 会员

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...