I tried debuggin tomcat sources. And compared the difference I am getting between normal tomcat websocket examples and my code. Only difference i could found was tomcat example uses Abstract Protocol class to fire the register session event and mine uses AjpProcessor(because I am using tomcat behind apache). but in AJpProcessor class it gets stuck and never calls registersession for Websocket.
I know above information might be utterlyt useless but this waht i have understood ..guys I need this to be resolved ASAP. it was working fine when i was using localhost everywhere. since I changed it to dummy host it has stopped working On Sat, Mar 1, 2014 at 2:31 PM, J Java <jforjava1...@gmail.com> wrote: > > 127.0.0.1 - - [01/Mar/2014:14:20:12 +0530] "GET > /jkweb/js/angle/addAngle.js?_=1393663610411 HTTP/1.1" 200 4278 > 127.0.0.1 - - [01/Mar/2014:14:20:41 +0530] "GET > /jkweb/angle/validateDuplicateAngleName.action?angleName=angle7 HTTP/1.1" > 200 - > phasingapp.com - - [01/Mar/2014:14:21:15 +0530] "GET > /jkweb/websocket/fileuploadtracker?uniqueTocken=9c9e740c-7171-4c33-bc92-e0a46cb2d2b5 > HTTP/1.1" 101 - > > Above is the relevant log section of apache : could it be the cause that > websocket request is coming from phasingapp.com and others from 127.0.01 > > > On Sat, Mar 1, 2014 at 1:53 PM, J Java <jforjava1...@gmail.com> wrote: > >> I had recently implemented websocket on tomcat 7.0.50. my tomcat runs >> behind apache 2.4. I use Strtus 2 and Spring Security. It has stopped >> working. >> >> Problem : Websocket connection is opened successfully. Javascript event >> handler get fires successfully. Apache logs show that request was accepted >> as an protocol upgrade request with 101 code Tomcat access logs also show >> the same code 101 for protocol upgrade >> >> However on server side onOpen message is not fired. I tried sending the >> message as soon as connection is opened in javascript's event handler.. >> There is no error in javascript but Server side endPoint's onmessage is >> never called just like onOpen is never called. >> >> Here are the changes I made after which it has stopped working: >> >> Windows Host file : I use dummy host name through Windows host file: >> 127.0.0.1 phasingapp.com >> 127.0.0.1 pricer.com >> >> URL of wesocket : >> >> old : ws://localhost:86/websocket/filuploadtrackerendpoint >> new : ws://phasingapp.com:86/websocket/filuploadtrackerendpoint >> >> Added virtual host config for apache : >> >> <Location /jkweb/websocket/> >> Require host phasingapp.com granted >> </Location> >> >> JkMount /jkweb/* localtomcat >> JkUnMount /jkweb/project/content/* localtomcat >> JkUnMount /jkweb/angle/content/* localtomcat >> JkUnMount /jkweb/index.jsp localtomcat >> JkUnMount /jkweb/ localtomcat >> >> ProxyRequests Off >> ProxyPreserveHost On >> >> ProxyPass /jkweb ! >> ProxyPass /jkweb/ ! >> ProxyPass /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >> ProxyPassReverse /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >> ProxyPass / http://localhost:8080/jkweb/ >> ProxyPassReverse / http://localhost:8080/jkweb/ >> >> Struts 2 : >> >> changed url pattern for Struts 2 filter from ".action to " /* ". Also added >> exclusion filters >> to strtus2 for webscoket urls : >> >> <constant name="struts.action.excludePattern" value=".*websocket/.*"/> >> >> Everything seems to be working fine as i am gettting no error anywhere in >> apache,tomcat,spring security and Struts2 logs. >> >> However on server side no handlers are called? >> >> Earlier I had faced similar problem but it was because I had put >> websocket-api jar in my WEB-INF/lib which was preventing websocket >> connection from getting opened. No connection is opened but no handler is >> called after that and after some time connection is closed obviously >> because of timout I suppose. >> >> Here is my ServerEndPoint class : >> >> package com.jkweb.websocket; >> >> import java.io.IOException; >> import java.util.HashMap; >> import java.util.List; >> import java.util.Map; >> >> import javax.websocket.EndpointConfig; >> import javax.websocket.OnMessage; >> import javax.websocket.OnOpen; >> import javax.websocket.Session; >> import javax.websocket.server.PathParam; >> import javax.websocket.server.ServerEndpoint; >> >> import org.slf4j.Logger; >> import org.slf4j.LoggerFactory; >> >> @ServerEndpoint(value="/websocket/fileuploadtracker") >> public class FileUploadTrackerEndPoint{ >> private static final Logger logger = LoggerFactory >> .getLogger(FileUploadTrackerEndPoint.class); >> private static HashMap<String,Session> socketConnectionMap = new >> HashMap<String,Session>(); >> >> @OnOpen >> public void open(Session session) { >> Map<String,List<String>> paramMap = session.getRequestParameterMap(); >> List<String> uniqueTockenValues = paramMap.get("uniqueTocken"); >> if(uniqueTockenValues != null && uniqueTockenValues.size() > 0){ >> socketConnectionMap.put(uniqueTockenValues.get(0),session); >> } >> } >> @OnMessage >> public void onMessage(Session session, String msg) { >> try { >> session.getBasicRemote().sendText(msg); >> } catch (IOException e) { >> logger.error(e.getMessage()); >> } >> } >> >> public static void sendMessage(String uniqueTocken,String msg){ >> try { >> Session wsSession = socketConnectionMap.get(uniqueTocken); >> wsSession.getBasicRemote().sendText(msg); >> } catch (IOException e) { >> logger.error(e.getMessage()); >> } >> } >> } >> >> and my javascript code : >> >> createFileUploadWebSocket : function(){ >> var that = this; >> var uniqueTocken = $("#uniqueTocken").val(), >> wsurl = >> "ws://phasingapp.com:86/jkweb/websocket/fileuploadtracker?uniqueTocken="+uniqueTocken, >> ws; >> ws = new WebSocket(wsurl); >> ws.onopen = function() >> { >> alert("opened..") //I get this aler sothis is called >> ws.send("test");//however this has not effect ...no error >> but server end point is not called >> }; >> ws.onmessage = function (evt) >> { >> message = evt.data; >> if(message == "Done."){ >> alert("closing.."); >> ws.close(); >> $('#progressbar').progressbar('option','value',100); >> } >> var currentVal = >> $('#progressbar').progressbar('option','value'); >> $('#progressbar').progressbar('option','value',currentVal >> <= 80 ?currentVal+1 : currentVal); >> }; >> ws.onclose = function(evt) >> { >> // websocket is closed. >> alert("Connection is closed..."+evt.code + ":"+evt.reason ); >> }; >> >> ws.onerror = function(evt){ >> alert("Connection is closed..."+evt.code + ":"+evt.reason ); >> }; >> >> }, >> >> Thanks, >> Shailesh. >> > >