我需要构建一个java应用程序,它会每隔10秒不断地请求url上的数据

我需要构建一个java应用程序,它会每隔10秒不断地请求url上的数据,java,cakephp,Java,Cakephp,起初,我认为这是一个编程问题,因为我每10秒创建一次连接。这可能会导致创建连接而没有正确关闭连接。但正如所建议的,这不是编程问题,而是实现/设计问题 我需要每隔5秒或10秒检查可用的任何新资源,例如:testign.com/list\u items。 Web服务是使用cakephp开发的 如果有任何资源可用,我将处理它。 任何人都可以帮助/指导我连接到url并每10秒轮询一次新资源 每10秒执行一次下面的代码,就会在20次循环后出现连接被拒绝或连接超时异常,并且在异常开始出现后,无法在浏览器上加

起初,我认为这是一个编程问题,因为我每10秒创建一次连接。这可能会导致创建连接而没有正确关闭连接。但正如所建议的,这不是编程问题,而是实现/设计问题

我需要每隔5秒或10秒检查可用的任何新资源,例如:testign.com/list\u items。 Web服务是使用cakephp开发的

如果有任何资源可用,我将处理它。 任何人都可以帮助/指导我连接到url并每10秒轮询一次新资源

每10秒执行一次下面的代码,就会在20次循环后出现连接被拒绝或连接超时异常,并且在异常开始出现后,无法在浏览器上加载url

oracleIncoming = new URL("http://calvins.restasy.com/bills/list_current/Kitchen");
    inputStreamReaderList = new InputStreamReader(oracleIncoming.openStream());

    //= new InputStreamReader(oracle.openStream());
    for (int j = 0; j < 10;) {
        URLReader.inputStreamReaderList.close();
        inputStreamReaderList = new InputStreamReader(oracleIncoming.openStream());




        BufferedReader in = new BufferedReader(URLReader.inputStreamReaderList);

    String inputLine;
    while ((inputLine = in.readLine()) != null) {
        URLReader.storeInput = URLReader.storeInput + inputLine;
    }
    in.close();

        URLReader.storeInput = "";
        //send response with bill no
        if (URLReader.sendBillNo == true) {
            URLReader.sendBillNo = false;

            oracle = new URL("http://calvins.restasy.com/bills/successfully_generated/" +billNo+"/"+"Kitchen");
            inputStreamReader = new InputStreamReader(oracle.openStream());
             try {

                BufferedReader in2 = new BufferedReader(inputStreamReader);


                String inputLine2;
                while ((inputLine2 = in2.readLine()) != null) {
                    urlBillData2 = urlBillData2 + inputLine2;
                }
                in.close();
                inputStreamReader.close();
            } catch (Exception e) {
                System.out.println(e);
            }
            System.out.println("Successfully Printed Order " + billNo);
            //System.out.println("http://calvins.restasy.com/bills/successfully_generated/" +billNo);
        }
        Thread.sleep(10000);
    }
} catch (Exception e) {
    System.out.println(e);
    callWeb();
}
oracleIncoming=新URL(“http://calvins.restasy.com/bills/list_current/Kitchen");
inputStreamReaderList=新的InputStreamReader(oracleIncoming.openStream());
//=新的InputStreamReader(oracle.openStream());
对于(int j=0;j<10;){
URLReader.inputStreamReaderList.close();
inputStreamReaderList=新的InputStreamReader(oracleIncoming.openStream());
BufferedReader in=新的BufferedReader(URLReader.inputStreamReaderList);
字符串输入线;
而((inputLine=in.readLine())!=null){
URLReader.storeInput=URLReader.storeInput+inputLine;
}
in.close();
URLReader.storeInput=“”;
//发送带有账单号的回复
if(URLReader.sendBillNo==true){
URLReader.sendBillNo=false;
oracle=新URL(“http://calvins.restasy.com/bills/successfully_generated/“+billNo+”/“+”厨房”);
inputStreamReader=新的inputStreamReader(oracle.openStream());
试一试{
BufferedReader in2=新的BufferedReader(inputStreamReader);
字符串输入2;
而((inputLine2=in2.readLine())!=null){
urlBillData2=urlBillData2+inputLine2;
}
in.close();
inputStreamReader.close();
}捕获(例外e){
系统输出打印ln(e);
}
System.out.println(“已成功打印订单”+billNo);
//System.out.println(“http://calvins.restasy.com/bills/successfully_generated/“+比尔诺);
}
睡眠(10000);
}
}捕获(例外e){
系统输出打印ln(e);
callWeb();
}
以下是堆栈跟踪:

java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
at java.net.URL.openStream(URL.java:1010)
at printerapp.URLReader.callWeb(URLReader.java:122)
at printerapp.URLReader.main(URLReader.java:71)
java.net.ConnectException:连接超时:连接
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
位于java.net.socksocketimpl.connect(socksocketimpl.java:366)
位于java.net.Socket.connect(Socket.java:529)
位于java.net.Socket.connect(Socket.java:478)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:163)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
http.HttpClient.(HttpClient.java:233)
http.HttpClient.New(HttpClient.java:306)
http.HttpClient.New(HttpClient.java:323)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
位于java.net.URL.openStream(URL.java:1010)
在printerapp.URLReader.callWeb(URLReader.java:122)
位于printerapp.URLReader.main(URLReader.java:71)
正如HotLicks建议只有在任何资源可用后才从web服务响应一样,执行的php超时为30秒。 如何使请求在超过此时间内保持活动状态。增加PHP执行时间限制将是一个安全问题


提前感谢。

一般来说,您不应该每5秒钟轮询一次网站。如果需要近乎即时的响应,则网站应提供一种机制,在该机制中,您可以发出get,并且服务器在数据可用之前不会响应(尽管通常在几分钟后会超时)

这不是一个非常具体的问题。@JesseJ我需要提供什么详细信息。我添加了更多的详细信息。这有帮助吗?我问了这个问题,但没有得到任何答案。所以我认为我没有正确地完成整件事。我想你没有遇到编程问题,而是服务器对过度刮擦的反应。@luksch好的如何通过api实现轮询新资源的预期任务
while(true) {
    dataIncoming = new URL("http://xyz.com/bills/list_current/Kitchen");
    inputStreamReaderList = new InputStreamReader(dataIncoming.openStream());

    //Your code

    try {
        Thread.sleep(5000);
    } catch(Exception e) {
        //Thread.sleep() can throw an exception if you
        //notify the thread from another thread
    }
}