JAVA实现UDP反向代理

用JAVA实现TCP协议的反向代理非常容易,只用不到100行代码就能搞定,每一个连接只需两个Socket,3条线程,进行输入流与输出流之间互相读写就可以了,可以承载所有TCP协议层以上的流量,比如HTTP(s),FTP,sFTP,邮件,即时通讯等等。其效果和HAProxy或者Nginx的TCP反向代理差不多,而且如果客户端的并发数比较大的情况,还可以使用JAVA的NIO和AIO框架,降低服务器资源的开销。

对于UDP协议来说,它是无连接无状态的点对点协议,所以与TCP协议比起来会有很大的不同,主要体现在:TCP是有链接协议,所以当有很多个客户端访问代理程序时,代理会转发他们的请求给服务器端,服务器响应数据给代理程序后,代理程序清楚的知道这个响应应该发给哪个客户端,并将数据发送回去。其逻辑如下

1、客户端发起一个Socket,绑定端口50000,目标地址为代理服务器8080。代理程序开启ServerSocket,绑定端口8080,于是一条客户端5000到代理端8080的连接就建立起来,客户端Socket通过OuputStream把数据发送给代理端的InputStream。


2、服务端监听到连接建立之后,立即new Socket,绑定51000端口,目标端口为真实服务器的80端口,于是一条代理服务器50000到真实服务器80的连接就建立起来。


3、然后代理服务器新建两个线程,一条将客户端的连接的InputStream写入到真实服务器连接的OutputStream,另一条线程将服务端连接的InputStream写入到客户端连接的OutputStream,就完成了一次代理转发。


在这个过程中,客户端开放了一个端口50000,代理程序开放两个端口8080和51000,真实服务器开放了一个端口80


如果有n个客户端,那么每个客户端也只开放一个端口,代理程序开放1+n个端口,真实服务器始终开放一个端口。


如果有n个客户端,每个客户端建立m条并发连接,那么每个客户端开放m个端口,代理程序开放1+m*n个端口,真实服务器开

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值