应用场景:前端页面点击刷新,调用服务器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;
}

最新文章

  1. js 字符串操作函数
  2. Android中Activity加入Fragment使用注意事项及常用技巧
  3. 我利用网上特效开发的Jquery插件
  4. [ZigBee] 2、 ZigBee开发环境搭建
  5. Mybatis解析动态sql原理分析
  6. Class org.apache.struts2.json.JSONWriter can not access a member of class org.springframework.aop.TruePointcut with modifiers "public"
  7. [转载] Hibernate与 MyBatis的比较
  8. 震惊!Vector两行代码求逆序对,六行代码过普通平衡树
  9. k8s-No.2-pod学习
  10. IP 地址基本知识
  11. Unity 3D动态修改Shader状态,使物体透明等等
  12. 设计模式-观察者模式(Observer Pattern)
  13. Android——开机启动功能(Service和BroadcastReceiver)
  14. ubuntu12.04开启虚拟机的unity模式
  15. jfinal框架的初级学习
  16. HDU 5671 Matrix 水题
  17. React组件的使用
  18. 【Android】添加依赖包
  19. 《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象
  20. 原!mysql5.6 存储过程 批量建表

热门文章

  1. HTTP Get Post究竟有哪些区别
  2. qemu对虚拟机的内存管理(二)
  3. 【UML】NO.53.EBook.6.UML.2.001-【Thinking In UML 大象 第二版】- 概述
  4. IIS下载无后缀文件的设置
  5. 第三章 document对象及数组
  6. 转:C#中Undo/Redo的一个简易实现
  7. VMware vSphere 5.x 与 vSphere 6.0各版本功能特性对比
  8. 教你如何在win7中安装cygwin64
  9. java之高效操作文件
  10. 0.1:Why are We Addicted to Games