Java中使用HTTP阻塞式调用服务器API
2024-10-18 10:27:06
应用场景:前端页面点击刷新,调用服务器A上Java接口,然后A调用服务器B的后台Python接口实时刷新后台数据库。
在这个场景中会涉及到两个问题:异步,Python服务器压力
(一)解决Python服务器压力
如果Python服务器接口不做任何措施,那么可能会有恶意的访问,从而导致该服务器一直刷新后台数据库。
我的解决方式是:服务器B会提供一串字符串给服务器A,当服务器A调用服务器B的服务时,将传递的参数和该字符串拼接再进行MD5加密,从而在服务器B上通过这个token值明确对方身份。
(二)异步
异步问题是:如何解决服务器A上的Java接口等待Python程序刷新数据库后返回的success,从而使得前端页面阻塞更新。
主要是通过Java中HttpURLConnection.InputStreamReader的方法实现异步:
public String requestRefresh(String token, String clusterName){
String result = null;
try{
// 打开和URL之间的连接
URL url = new URL(URL_Refresh_Couchbase_Cluster);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
// 把数据写入请求的Body
out.write("token=" + token + "&cluster=" + clusterName); //参数形式跟在地址栏的一样
out.flush();
out.close();
// 获取数据,将返回的输入流转换成字符串
InputStream inputStream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
result = bufferedReader.readLine();
// 释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
connection.disconnect();
}catch (Exception e){
log.info("(requestRefresh) sending GET Request to refresh mysql databse has exception : {}", e);
e.printStackTrace();
}
return result;
}
最新文章
- js 字符串操作函数
- Android中Activity加入Fragment使用注意事项及常用技巧
- 我利用网上特效开发的Jquery插件
- [ZigBee] 2、 ZigBee开发环境搭建
- Mybatis解析动态sql原理分析
- Class org.apache.struts2.json.JSONWriter can not access a member of class org.springframework.aop.TruePointcut with modifiers ";public";
- [转载] Hibernate与 MyBatis的比较
- 震惊!Vector两行代码求逆序对,六行代码过普通平衡树
- k8s-No.2-pod学习
- IP 地址基本知识
- Unity 3D动态修改Shader状态,使物体透明等等
- 设计模式-观察者模式(Observer Pattern)
- Android——开机启动功能(Service和BroadcastReceiver)
- ubuntu12.04开启虚拟机的unity模式
- jfinal框架的初级学习
- HDU 5671 Matrix 水题
- React组件的使用
- 【Android】添加依赖包
- 《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象
- 原!mysql5.6 存储过程 批量建表
热门文章
- HTTP Get Post究竟有哪些区别
- qemu对虚拟机的内存管理(二)
- 【UML】NO.53.EBook.6.UML.2.001-【Thinking In UML 大象 第二版】- 概述
- IIS下载无后缀文件的设置
- 第三章 document对象及数组
- 转:C#中Undo/Redo的一个简易实现
- VMware vSphere 5.x 与 vSphere 6.0各版本功能特性对比
- 教你如何在win7中安装cygwin64
- java之高效操作文件
- 0.1:Why are We Addicted to Games