TLDR; nysocks是基于kcp提供的 nodejs 上的 SOCKS5 代理工具,对丢包的网络环境有较好的效果。
Linode Tokyo 2, JP 机房的测试:
tcp 代理
nysocks(kcp + libuv) fast
前几个月看到了 kcp 和 kcptun,觉得很有意思。起初我判断如果要做一个代理工具的话,整体性能不会是最终瓶颈。于是便想用熟悉的 node (纯 js )一边学习 kcp,一边重新写一个代理工具。但最终在性能这块,实际上还是达不到可用的程度,主要有两点:
果然过于底层的应用对脚本来说还是太严苛了。于是我便考虑用 c/cpp 以 node-addon 的形式写底层的传输、加密解密部分,顶层还是用 node 做 SOCKS 和 tcp 部分加快开发速度。但我一开始还是担心,因为我知道对于对 c/cpp,v8 底层,libuv 不熟悉的话,写出来的 node-addon 性能往往还不如用纯 js 写的代码高。
好在之前看到了 Scott Frees 的 blog 和这本电子书 —— C++ and Node.js Integration(需付费)。实践证明,如果你有类似的需求的话,特别是在 c/cpp 层面进行非阻塞进程的操作及大量 buffer 在 c/cpp 和 v8 之前转换的这种场景,这本书中的内容是非常有效、实用的。
最终的结果还是让我自己满意的,c/cpp 部分满足了性能的需求,node 部分开发得足够快,也算是让自己找到了对 node-addons 的定位。但整个项目比我一开始预想的大了太多,精力和经验有限,目前还有非常多可以优化、改进的点。
希望能对有需求的同学和需要类似实现参考的同学一点微小的帮助。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.