简体   繁体   English

在JAVA中长时间轮询Jquery?

[英]Long polling Jquery in JAVA?

This is the question for my Java Chat application . 这是我的Java Chat application的问题。

I will call the pingAction() in my external Jquery when my application get initiated. 启动应用程序时,我将在外部Jquery中调用pingAction()

The Jquery pingAction will be , Jquery pingAction将为

function pingAction(){

    $.ajax(
            {
                type: "post",
                url: "PingAction",
                async:     false,
                data : "userId="+encodeURIComponent(userId)+"&secureKey="+encodeURIComponent(secureKey)+"&sid="+Math.random() ,
                cache:false,
                complete: pingAction,
                timeout: 5000 ,
                contentType: "application/x-www-form-urlencoded; charset=utf-8",
                scriptCharset: "utf-8" ,
                dataType: "html",

                error: function (xhr, ajaxOptions, thrownError) {
                alert("xhr.status : "+xhr.status);

                if(xhr.status == 12029 || xhr.status == 0){
                    //alert("XMLHttp status : "+xhr.status);
                    $("#serverMsg").css("backgroundColor" , "yellow");
                    $("#serverMsg").text("Your Network connection is failed !");
                    $("#serverMsg").show();
                }
                //setTimeout('pingAction()', 5000);
                xhr.abort();
            },

            success: function( responseData , status){
                if($("#serverMsg").text() == "" || $("#serverMsg").text() == "Your Network connection is failed !"){
                    disableServerMessage();
                }

                if(responseData != "null" && responseData.length != 0  && responseData != null){

                    var stringToArray = new Array;
                    stringToArray = responseData.split("<//br//>");
                    var len = stringToArray.length;
                    for(var i=0;i<len-1;i++){
                        getText(stringToArray[i]);

                    }
                }

                //setTimeout('pingAction()', 5000);
            } 

            }                           
    );

}

My PingAction Servlet will be , 我的PingAction Servlet是,

public class PingAction extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private String secureKey;
    private String userId;
    private int fromPosition ;
    private FlexChatProtocol protocol = null;
    private Ping ping = null;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setCharacterEncoding("UTF-8");
        response.setContentType("UTF-8");
        PrintWriter out = response.getWriter();

        request.setCharacterEncoding("UTF-8");

        secureKey = request.getParameter("secureKey");
        userId = request.getParameter("userId");
        CustomerInfo customer = ApplicationInfo.customerDetails.get(userId);
        if(customer != null){
            fromPosition = customer.getFromPosition();
        }

        if(ApplicationInfo.flexProtocol != null ){

            protocol = ApplicationInfo.flexProtocol;

            ping = new Ping();
            ping.sendPing(secureKey, userId, fromPosition+1, protocol, serverMessage);

            if(customer != null){
            message = customer.getFullMessage();
            }

            out.println(message);
        }
    }

}

Before using the Long Poling , I will call the pingAction() in javaScript for every 5 seconds using the setTimeInterval() to refresh the connection and getting the server message. 使用前Long Poling ,我会打电话给pingAction() in javaScript为每5 seconds使用setTimeInterval()刷新连接,并获取服务器信息。

Now I need to use the LONG POLLING concept in the Chat application.So I modified my Jquery pinAction() what you have seeing above. 现在我需要在Chat应用程序中使用LONG POLLING concept ,因此我修改了Jquery pinAction()上面的内容。

How can I achieve LONG POLLING using the JQUERY ? 如何使用JQUERY实现LONG POLLING

Hope our stack members will help me ! 希望我们的会员能帮助我!

private ChatContext context = ChatContext.getInstance();

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    Long lastmessage = // just put this somewhere

    List<String> messages = context.getMessagesIHaventGotYet(lastmessage); // blocking call
    Object formatedMessages = formatmessages(messages);
    out.write(formatedMessages);

 }

context.getMessagesIHaventGotYet(); context.getMessagesIHaventGotYet(); should be a blocking operation so it keeps on waiting untill new messages arrive, then it kicks into action. 应该是一个阻止操作,因此它将一直等待直到有新消息到达,然后开始执行。 or something along those lines. 或类似的规定。

Basicly long polling means the server "hangs" untill the information it needs has been retrieved from somewhere, then it writes it in its output buffer and closes the connection, the client instantiates the conneciton ASAP again to start another long poll. 基本上,长轮询意味着服务器“挂起”,直到从某处检索到所需的信息,然后将其写入其输出缓冲区并关闭连接,客户端再次实例化连接,以开始另一个长轮询。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM