注册异步通知的URL?

时间:2010-06-24 21:39:24

标签: java events asynchronous comet

我想了解有关异步通知的更多信息。我有一个以下形式的网址:

http://www.sample.com/AsyncNotify?sessionId=xxxxxx

现在,如果我使用sessionId调用此URL,则相当于注册异步通知。我正在使用Apache HTTP Commons库来做Http Post和Get。如果是这种情况,那么我如何从服务器端接收事件?我是否必须忘记这种方法并使用套接字?目前,这是我的方法:

HttpClient httpClient = new HttpClient;
String url = "http://www.sample.com/AsyncNotify?sessionId=xxxxxx"
GetMethod get = new GetMethod(url);
try {
   httpClient.executeMethod(get);
   //read the response
} catch(Exception e) {

}

我在想的是在while循环中建立一个套接字级连接,并在收到一些数据时调用一个处理程序,但有没有更好的方法来实现呢?

编辑:

我已经使用xSocket进入下一阶段,但连接在30秒后关闭:

         try {
            String _GETRequest = "/sample/notify";
            HttpClientConnection con = new HttpClientConnection("10.0.0.23", 5050);

            con.setConnectionTimeoutMillis(100000);
            GetRequest request = new GetRequest(_GETRequest);
            request.setParameter("id", id);

            IHttpResponseHandler responseHandler = new AsyncHandler();

            con.send(request, responseHandler);
            org.xlightweb.client.HttpClient httpClient = new org.xlightweb.client.HttpClient();
            request.setParameter("id", id);
            con.send(request, responseHandler);

                    // Don't let the program terminate. In other words,
                    // wait for a message from the server
            while(con.isOpen()) {};

            if(!con.isOpen()) {
            }

        } catch (ConnectException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

1 个答案:

答案 0 :(得分:1)

Tomcat推出了名为Tomcat Comet(http://tomcat.apache.org/tomcat-6.0-doc/aio.html)的技术。它也被用于新的Servlet 3.0规范。此技术将允许您执行持久HTTP连接,通过该连接可以将通知推送到任何客户端。

还有一种名为WebSockets的技术是HTML 5的一部分 (http://dev.w3.org/html5/websockets/)当然,它现在仅适用于一组有限的浏览器。可能应该等待这个。

当然,当前技术向后兼容(即使它很糟糕)的方法是定期轮询服务器并以此方式获得结果。

当然,如果每个人(客户端和服务器)都在本地网络上,那么可能是像RMI甚至是EJB或JMS Pub / Sub这样的东西。

以下是Comet教程http://www.ibm.com/developerworks/web/library/wa-cometjava/index.html和另一个http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp-test.html