最近学习 netty ,为了练手写了这个内网穿透工具 https://github.com/wandererex/wormhole
将内网的端口映射到公网,从而达到内网穿透的目的
java -jar server-1.0.0-SNAPSHOT-jar-with-dependencies.jar --port 8090
java -jar proxy-1.0.0-SNAPSHOT-jar-with-dependencies.jar --serverHost 127.0.0.1 --serverPort 8090 --configPath ./config.json
{
"mysql": {
"ip": "127.0.0.1",
"port": "3306",
"mappingPort": "3307"
},
"ssh": {
"ip": "127.0.0.1",
"port": "22",
"mappingPort": "2200"
}
}
1
lhbc 2023-05-26 19:32:52 +08:00 via Android
用 Java 来写这个有点……
|
2
stevenkinwjg OP @lhbc 怎么说?
|
3
privil 2023-05-26 19:40:30 +08:00
@stevenkinwjg #2 还要装个 jdk 太不环保了,要不你用那个能编译成原生程序的来写
|
4
stevenkinwjg OP @privil 其实这是我学习 netty 的练手项目,会改进的
|
5
stevenkinwjg OP @privil 用 go 重写一下也行
|
6
yaott2020 2023-05-26 20:05:15 +08:00 via Android
只是个内网穿透,java 太重了。。
|
7
oldshensheep 2023-05-26 20:20:13 +08:00
看了以下开在用 Java8 ,还在用 fastjson 。
不过你这个可以用 GraalVM 编译成 Native 。 用 Vertx 写会好受一些。学 Netty 学一半放弃了,日了狗了一样。 |
8
xe2vforesu 2023-05-26 23:47:13 +08:00
点赞,对学习 netty 有帮助,能有详细的文档说明就更好了
|
9
littlewing 2023-05-27 00:32:26 +08:00
看出来是 “为了练手” 了,加油
|
10
hotsymbol 2023-05-27 11:14:49 +08:00
用 Java 实现。是需要每个人都有一台 4C16G 的云服务器吗
|
11
Alias4ck 2023-05-27 11:46:32 +08:00
可以学习一下 这个 tunel 工具 https://github.com/ekzhang/bore
|
12
npe 2023-05-27 11:58:51 +08:00 1
人家是在学习 Netty ,用 Java 写咋了?那你用 Rust 写一个呗
|
13
stevenkinwjg OP @npe 哈哈,就是
|
14
rekulas 2023-05-27 13:59:29 +08:00 2
这不算啥,阿里有个监控都是 java 写的,你安到 1h1g 服务器,监控自己先占个 80%资源 🤣
|
15
stevenkinwjg OP @oldshensheep 确实比较老了,现在流行啥技术?
|
16
lizhian 2023-05-27 17:46:42 +08:00
作为一个学习项目来说挺好的~
|
17
JustSong 2023-05-28 09:42:15 +08:00 via Android
我也有一个类似的练手项目,不过是 Go 写的,仅单个可执行文件: https://github.com/songquanpeng/go-public
|
18
StevenQAQ 2023-05-29 09:48:33 +08:00
能看出非常深厚的 Java 功底
|
19
ycvk 2023-05-29 12:43:32 +08:00
vertx 或者 quarkus 了解下,按楼上说的,用 GraalVM 编译成 Native 更好些
|
20
bugfan 2023-05-31 09:10:39 +08:00
|
21
yazinnnn 2023-08-19 11:07:59 +08:00
🤔测试了一下, 感觉没有并发的能力?
用 wrk 测试了一下代理的 nginx, rps 只有个位数.... 简单看了眼代码, server 这边每个 proxy server 都会创建一个 event loop group? |
22
stevenkinwjg OP @yazinnnn 感谢测试,这个我是为了学习 netty 写的,有很多要优化的地方
|
23
stevenkinwjg OP @yazinnnn 能把测试的结果贴到 GitHub 上吗?我看看
|
24
yazinnnn 2023-08-23 11:22:39 +08:00
@stevenkinwjg #23
简单总结一下 单个连接连 proxy server 貌似木有问题, 多个连接去连会出错(没有在代理端口->被代理端口那里区分每个 client?) 单个连接传输大数据量的文件有 bug proxy 和 server 貌似都没有热更新能力, proxy 程序关闭之后, server 也没有关掉开启的 proxy server https://gist.github.com/yazinnnn/8e8529fab8eb93ba81ad68e1767a2965 |
25
stevenkinwjg OP @yazinnnn 好的,我看看
|
26
stevenkinwjg OP @yazinnnn 大佬,我测试了一下并发连接。结果还好
![微信截图_20230907105048.png]( http://tva1.sinaimg.cn/large/00779OZ0ly1hhntyokefkj30r107ydi5.jpg) 能复现一下你的测试吗 |
27
stevenkinwjg OP @yazinnnn ![微信截图_20230907105048.png]( https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png)
|
28
stevenkinwjg OP @yazinnnn 为啥 v 站发不了图片啊
|
29
stevenkinwjg OP ![微信截图_20230907105048.png]( https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png)
|
30
stevenkinwjg OP |
31
stevenkinwjg OP <img src="https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png" alt="微信截图_20230907105048.png" title="微信截图_20230907105048.png" />
|
32
stevenkinwjg OP [![微信截图_20230907105048.png]( https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png)]( https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png)
|
33
yazinnnn 2023-09-07 14:29:08 +08:00
|
34
yazinnnn 2023-09-07 14:47:21 +08:00
|
35
stevenkinwjg OP @yazinnnn 图挂了,发个链接
|
36
stevenkinwjg OP @yazinnnn https://github.com/wandererex/wormhole 加了测试,现在可以并发连接 了,但 rps 只有几百
|
37
yeyang5211 2023-12-20 22:54:18 +08:00
@stevenkinwjg 最近在学习 netty 跟着这个项目写了一遍, 每次转发数据的时候都要去 map 里找一下 channel 这样并发起来效率是会变差 ,
还有一个问题想咨询一下 ackHandle 是干啥的 ? 是在服务器关闭的时候等待数据读写完毕之后再关闭 channel 吗 |
38
stevenkinwjg OP @yeyang5211 最近优化了一下,主要是防止服务端活客户端关闭时数据还没有完全发给对端就关闭导致的错误
|
39
stevenkinwjg OP 性能优化了一下,qps 过 1k 了
![我的头像](/https://github.com/wandererex/wormhole/blob/optimize-20231013/test.png) |
40
stevenkinwjg OP 性能优化了一下,qps 过 1k 了
![我的头像]( https://github.com/wandererex/wormhole/blob/optimize-20231013/test.png) |