Java中使用HTTP阻塞式調用服務器API


應用場景:前端頁面點擊刷新,調用服務器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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM