[英]Long polling Jquery in JAVA?
这是我的Java Chat application
的问题。
启动应用程序时,我将在外部Jquery中调用pingAction()
。
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);
}
}
);
}
我的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);
}
}
}
使用前Long Poling
,我会打电话给pingAction() in javaScript
为每5 seconds
使用setTimeInterval()
刷新连接,并获取服务器信息。
现在我需要在Chat应用程序中使用LONG POLLING concept
,因此我修改了Jquery pinAction()
上面的内容。
如何使用JQUERY
实现LONG POLLING
?
希望我们的会员能帮助我!
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(); 应该是一个阻止操作,因此它将一直等待直到有新消息到达,然后开始执行。 或类似的规定。
基本上,长轮询意味着服务器“挂起”,直到从某处检索到所需的信息,然后将其写入其输出缓冲区并关闭连接,客户端再次实例化连接,以开始另一个长轮询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.