Java轮询或侦听URL以进行响应[Java SE]

时间:2014-01-20 15:30:27

标签: java http polling

我有一个模块,它使用一个简单的HTTP帖子从FHEM服务器(家庭自动化)请求状态(技术上是一个JSON对象)。

如何轮询requestState方法,以便在URL上持续监听(如每125毫秒)状态更改?

[注意:我没有使用任何服务器,这是一个从Main函数调用的普通Java程序。]

举例说明:

public static boolean requestState(){
HttpPost post = new HttpPost("http://localhost:8083/fhem?cmd=jsonlist+device1");
try{
        HttpResponse response = client.execute(post);

        BufferedReader rd = new BufferedReader( 
                   new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
                    //response is a JSONObject
        JSONObject o = new JSONObject(result.toString());

                    //get the status from the JSON object
        System.out.println(o.getJSONObject("Result").get("STATE"));
        String STATE = o.getJSONObject("Result").get("STATE");
                    if(STATE.equals("OPEN"))
                       return false;
                    else
                       return true;
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

我想要达到的目标是:

keep listening to URL
  parse response to judge the status
  if status == OPEN
    soundAlarm();

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以保持发布请求并在循环中读取结果,并使用Thread.sleep在每个轮询和另一个轮询之间放置暂停。我不熟悉FHEM,但也许有一种更有效的方法,你可以使用FHEM将状态更改推送到你的应用程序而不必不断轮询它。