Reputation: 8387
This is the question for my Java Chat application
.
I will call the pingAction()
in my external Jquery when my application get initiated.
The Jquery pingAction
will be ,
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 ,
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.
Now I need to use the LONG POLLING concept
in the Chat application.So I modified my Jquery pinAction()
what you have seeing above.
How can I achieve LONG POLLING
using the JQUERY
?
Hope our stack members will help me !
Upvotes: 2
Views: 1651
Reputation: 1331
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(); 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.
Upvotes: 1