-
2017-03-14 01:23:36
前束
本篇博客没有给出一个完善的技术解决方案,使用java搭建代理服务器是处理本人想要实现主备切换的broker而产生的想法,由于能力,时间和精力的限制,目前只能将想法的大致内容实践一下,这里只是分享一些这两天在这上面做出的一些探索,以免其他人重蹈覆辙。
简述
需求简述为通过JAVA实现一个代理服务器,客户端的Http请求全部指向代理服务器,代理服务器基于一定的策略将请求转发给后台服务器,(这里的策略就比较核心,能够实现很多特殊的需求,比如我想实现的主备切换的功能,通过添加主机检测模块,如果主机检测模块检测到主服务器down了,那么程序能够顺利的迁移到备用服务器上)。
技术准备
Http Request和Response的基础知识
java socket/Serversocket 类的使用技巧问题分析
问题可以简化为
1代理服务主机将客户机与代理服务主机之间的请求截获,然后直接将信息转发给目标主机
2代理服务主机将目标主机的回应直接转发给客户机。那么
代理服务主机可以通过socket直接获取客户机发送到本机指定端口的数据报文,那么通过分析内容可以得到客户机想要发送给目标主机的信息代理服务主机可以通过httpRequest的方式再次重新请求,将原来请求中的内容转发给目标主机,之后将目标主机的回应组织成Http Response的形式转发给客户机。
Demo
代码中只演示的代理服务器中的通信过程,中间的源信息的分析 以及返回值得构造还没有做,另外还存在多线程控制等问题,建议参考者将精力花在解决以上问题上面。
import java.net.* ; import java.io.* ; class ActionSocket extends Thread{ private Socket socket = null ; public ActionSocket(Socket s){ this.socket = s ; } public void run(){ try{ this.action() ; }catch(Exception e){ e.printStackTrace(); } } public void action() throws Exception { if (this.socket == null){ return ; } InputStream cis = this.socket.getInputStream(); URL url = new URL("http://www.baidu.com"); HttpURLConnection action = (HttpURLConnection) url.openConnection(); InputStream sis =action.getInputStream(); OutputStream cos = socket.getOutputStream(); int length; byte bytes[] = new byte[1024]; while(true){ try { if ((length = sis.read(bytes)) > 0) { cos.write(bytes, 0, length);//将http请求头写到目标主机 System.out.println(new String(bytes)); cos.flush(); } else if (length < 0) break; } catch (Exception e) { } } socket.close(); cis.close(); } } public class SocketServer{ public static void main(String args[])throws Exception{ ServerSocket server = new ServerSocket(8888); while(true){ Socket socket = server.accept(); ActionSocket ap = new ActionSocket(socket); ap.start(); } } }
参考
http://www.fullstackdevel.com/computer-tec/network/731.html
http://stackoverflow.com/questions/6876266/java-net-connectexception-connection-refused
http://www.freebuf.com/articles/web/21832.html更多相关内容 -
Java如何实现代理服务器?
2021-08-02 18:21:49代理服务器的作用,大家是有目共睹的,确实给我们带来了很大的方便,Java如何实现代理服务器? 首先,这个需求可以简化为: 1、代理服务主机将客户机与代理服务主机之间的请求截获,然后直接将信息转发给目标主机; ...代理服务器的作用,大家是有目共睹的,确实给我们带来了很大的方便,Java如何实现代理服务器?
首先,这个需求可以简化为:
1、代理服务主机将客户机与代理服务主机之间的请求截获,然后直接将信息转发给目标主机;
2、代理服务主机将目标主机的回应直接转发给客户机。
代理服务主机可以通过socket直接获取客户机发送到本机指定端口的数据报文,那么通过分析内容可以得到客户机想要发送给目标主机的信息,代理服务主机可以通过socket的方式再次重新请求,将原来请求中的内容转发给目标主机,之后将目标主机的回应转发给客户机。
对于Java SE项目来说,有两者方式来实现:
1、采用原生的Java socket 编程。(存在多线程问题…)
2、采用第三方的网络应用框架,比如:mina、netty等。(开发简单,稳定可靠)
对于Java WEB项目来说,也有两者方式来实现:
1、采用上面的Java SE方案。
2、HTTP代理,拦截客户端的请求,并采用Http协议发送GET/POST请求给目标服务器。
-
Java搭建文件服务器
2017-12-01 17:54:33从上传文件到文件服务器搭建一系列都会写到,前提是你会用以上的东西。这里做到资源完全分离能不跟tomcat不跟一起访问,可以扩展到分布式模式。 首先用使用maven建一个web工程,这里主要是做文件上传,所以其他的...技术选型:Java、maven、nginx、tomcat、window
从上传文件到文件服务器搭建一系列都会写到,前提是你会用以上的东西。这里做到资源完全分离能不跟tomcat不跟一起访问,可以扩展到分布式模式。
首先用使用maven建一个web工程,这里主要是做文件上传,所以其他的技术都不会体现,如果你需要可以加我的群联系我。
使用maven是为了方便部署,这里增加一个知识点热部署,直接上pom.xml代码
是用热部署需要先开一个tomcat ,需要配置下tomcat的权限 tomcat-users.xml<role rolename="admin" />
<role rolename="manager" />
<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="admin" password="admin" roles="admin,manager,manager-gui,manager-script" />
然后使用maven命令:
tomcat7:redeploy就可以进行热部署了(要先启动tomcat)为了达到文件资源与项目分离,所以上传文件的时候是指定的绝对路径,创建servlet类(简单的上传)
public static String localPath ="F:/upload/";
使用到的jar包在pom.xml中有说明,页面就一个简单from表单提交文件接下来就是访问资源了,这里使用的nginx1.6.3版本下载window版本修改nginx.conf 配置
我这里使用的80端口,需要注意端口问题 这样配置完了以后就可以达到项目与资源分离了,就算项目挂了,还是可以访问到资源的,
不会nginx怎么办如果你想只是资源分离,操作不分离的 可以在tomcat中虚拟一个路径,可以直接通过虚拟路径也是可以访问到的,这里资源和代码是分离的,但是操作都需要经过tomcat 没有使用到nginx来代理。 -
Java实现简单HTTP服务器与HTTP代理
2013-03-11 17:01:03Java实现简单HTTP服务器与HTTP代理 -
部署Squid搭建简单代理服务器
2021-12-15 10:14:40在Linux上部署Squid服务搭建一个简单的代理服务器。简介
Squid 是一种用来缓冲Internet数据的软件。它接受来自客户端的请求并适当地处理这些请求。简单来说如果想下载一个web页面,客户端请求Squid为它取得这个页面。Squid随之连接到远程服务器并向这个页面发出请求,然后Squid显式地聚集数据到客户端机器同时复制一份,当下一次有人需要同一页面时,Squid可以从磁盘中读到它,就将数据迅即就会传输到客户机上。
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。
服务名称:squid
主配置文件:/etc/squid/squid.conf
默认监听端口:3128
我这里是直接在一台公网服务器上进行安装搭建的,然后再本地主机进行代理测试。
安装
可以直接使用yum安装不要考虑依赖性问题。
yum install squid -y
配置
修改主配置文件
vim /etc/squid/squid.conf
:set nu
在59行将deny改成allow,表示允许所有人连接。
在62行默认是3128端口,我这里改成了60000。
取消65行的注释,表示缓存条目。
启动squid服务,查看端口监听情况。
systemctl start squid
netstat -tunpl
验证
我这里先在谷歌浏览器查看一下 本机当前ip,然后利用的代理插件设置刚刚搭建好的squid服务器的ip:port
然后使用这条代理规则刷新一下网页
可以看到本地ip变成了公网的ip。
这里配置的是一个简单的正向代理服务。
正向代理就是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定原始服务器,然后代理向原始服务器转交请求并将获得的内容返回给客户端。
结语
已无暇顾及过去,要向前走。
-
基于Java实现的代理服务器
2010-07-31 17:35:13基于Java实现的代理服务器,实现socks4,socks5协议 -
JAVA写HTTP代理服务器(一)-socket实现
2017-09-04 16:12:40HTTP代理服务器是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障... -
CentOS7-使用squid搭建http代理服务器
2021-11-15 14:53:17我使用的是CentOS7 版本的服务器其他版本估计也都差不多,可以自己试试 介绍 1.代理proxy: 首先从概念上讲,代理这个词,词语的汉语解释:...那么代理服务器的作用,就是把我们的请求先发送给代理服务器,由代理 服务 -
Nginx+ftp搭建图片服务器
2018-05-10 18:33:01nginx和ftp搭建图片服务器 一、需要的组件 图片服务器两个服务: Nginx(图片访问): 1、http服务:可以使用nginx做静态资源服务器。也可以使用apache。推荐使用nginx,效率更高。 2、反向代理 实现 负载均衡 ftp... -
java--Linux服务器环境搭建,以及Nginx反向代理
2020-12-28 17:56:17Linux系统java环境(以及Nginx反向代理) 主要安装jdk和Tomcat环境 1.tomcat环境安装 2.jak环境安装以及环境变量配置 两种方式: 第一种:使用yum方式安装jdk 第二种:直接官网下载压缩包进行安装(以下只讲第一种... -
快速搭建一个自己的服务器详解(java环境)
2018-07-19 22:12:51服务器的购买 1. 我选择的是阿里云的服务器,学生价9.5元一个月,百度直接搜索阿里云,然后点击右上角登录,推荐大家用支付宝扫码登录,方便快捷。阿里云官网的东西比较多,登录后我找了很久也没有找到学生服务器... -
node.js搭建代理服务器实现跨域
2017-04-24 12:39:07node.js搭建代理服务器实现跨域前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦... -
JAVA实现WebSocket服务器
2021-04-30 16:54:46最近做一个物联网相关的项目,需要让服务器主动推送消息给客户端。简单的话可以在客户端进行ajax轮询,但对于服务器来说会有大量的无效请求,客户端一多还容易扑街,于是准备上WebSocket。 环境为Spring Boot。 ... -
用Java开发代理服务器
2012-08-23 16:35:18步骤一:内部的浏览器发送请求给代理服务器。请求的第一行包含了目标URL。步骤二:代理服务器读取该URL,并把请求转发给合适的目标服务器。步骤三:代理服务器接收来自Internet目标机器的应答,把应答转发给合适的... -
Java实现Socket5代理服务器
2019-01-24 17:13:43Java实现Socket5代理服务器 -
JAVA 上传文件到另一台远程服务器(包含搭建文件服务器 基于Linux)
2021-12-03 16:29:151.首先搭建一个文件服务器,不管你是本地虚拟机镜像创建的服务器,还是买的云服务器,都适用。 1)先去下载一个tomcat的安装包,如果你下不到没关系,我有。 链接:... -
手把手教你搭建Nginx代理服务器,无论是实施岗还是开发岗,Nginx都是你的不二选择
2019-01-04 18:05:38手把手教你搭建Nginx代理服务器,无论是实施岗还是开发岗,Nginx都是你的不二选择 Nginx是个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. Nginx作为一款轻量级的Web代理服务器.其由于内存少,并发能力强,... -
如何搭建java的中转服务器
2016-10-20 08:54:08现在有一个项目,这个项目的页面、业务、图片分散在3个不同端口的服务中 ...可以通过新建一个新服务器,让前端访问这个新服务器。页面、静态文件以及业务由新服务器分配 对了,我没有服务端的源码 -
【教程】使用腾讯云轻量应用服务器搭建 Guacamole 远程桌面代理服务器,让境外小鸡远程不再卡顿!...
2021-02-27 12:32:45一段时间前,腾讯云推出的轻量应用服务器的活动,性价比较高,我身边就有很多大佬购买了腾讯云轻量应用服务器,今天,博主继续给大家带来腾讯云轻量应用服务器的玩法,很多时候大家连接国外的服务器,会因为线路的... -
Java搭建文件服务器,与web项目分离 可满足分布式要求
2017-07-10 15:11:40从上传文件到文件服务器搭建一系列都会写到,前提是你会用以上的东西。这里做到资源完全分离能不跟tomcat不跟一起访问,可以扩展到分布式模式。 首先用使用maven建一个web工程,这里主要是做文件上传,所以其他的... -
mac命令行配置代理服务器_如何在Mac上配置代理服务器
2020-09-20 07:10:45mac命令行配置代理服务器When you configure a proxy server on your Mac, applications will send their network traffic through the proxy server before going to their destination. This may be required by ... -
【Linux服务】socket5代理服务器搭建
2020-05-22 14:15:18如果在系统中需要搭建socket代理服务,可以参照如下脚本: 1、将账号密码替换成自己想要的设置 2、将"端口"替换成需要的端口号 3、运行脚本,即可完成安装 4、可通过netstat -lntp | grep ss5命令查看端口是否... -
java通过sockt实现代理服务器
2018-01-10 16:41:38HTTP 代理有分两种: ...这种代理扮演的是「中间人」角色,对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报文。Tunneling TCP bas -
使用Docker搭建自用代理网络
2021-06-24 17:20:041、安装Docker并启动 sudo wget -qO- https://get.docker.com/ | sh sudo service docker start 2、下载VPN镜像 sudo docker pull hwdsl2/ipsec-vpn-server 3、创建配置文件 ...--name ipsec- -
netty系列之:使用netty搭建websocket服务器
2021-09-27 09:21:20文章目录简介netty中的websocketwebsocket的版本...通过Websocket我们可以实现客户端和服务器端的即时通讯,免除了客户端多次轮循带来的性能损耗。 既然websocket这么优秀,那么怎么在netty中使用websocket呢? -
基于阿里云CentOS8搭建远程服务器
2021-11-22 20:34:01基于阿里云CentOS-8+宝塔面板搭建远程服务器—0基础入门篇 星光不问赶路人,时间不负有心人,最近做课程设计就是要用到服务器,自己花了一天时间去了解以及部署。记录一下。这篇文章一轻量服务器为例,云服务器... -
jradius+freeRadius 搭建AAA认证服务
2019-01-22 11:19:39因为freeradius是c写的,而需求是需要java搭建radius服务器,jradius正好是java写的,在freeradius3.0以下把jradius的模块映射出去,这样就可以用java代码来操作java端的服务器。 本资源好几个人搭建1个周,过程很... -
MQTT通信架构 搭建MQTT服务器
2022-04-03 11:11:10MQ 遥测传输 (MQTT) 是基于代理的发布/订阅的消息传输协议。 传输屏蔽消息内容 TCP/IP有连接传输(可靠) 小型传输,开销很小,降低网络流量 使用lastwill等机制告知客户端异常中断(本次实验用不到) 三种消息发布...