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 Updated configuration..above is the complete configuration for my virtualhost. On Sat, Mar 1, 2014 at 6:14 PM, J Java <jforjava1...@gmail.com> wrote: > Mark, > > following is how i have configured reverse proxy : > > 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 > > I am using Apache 2.4 which comes with mod_proxy_wstunnel module to support > http upgrade to Websocket. > > Also my code works fine if I configure localhost everywhere, its just when I > change it to use dummy host using window's hosts file and virtual host it > stops working. And it upgrades to WebSocket but cant send or receive messages > after that. Please find in detail configuration and code in my first post. > Any pointers how to go about it will really help. Or let me know the right > place to open bug for this. > > Thanks, > > Shailesh. > > > > On Sat, Mar 1, 2014 at 4:10 PM, Mark Thomas <ma...@apache.org> wrote: > >> On 1 March 2014 10:02:48 GMT, J Java <jforjava1...@gmail.com> wrote: >> >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 >> >> How is your reverse proxy configured? mod_jk doesn't support HTTP upgrade >> and the last time I looked mod_proxy support for WebSocket wasn't fit for >> purpose. >> >> Mark >> >> >> >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. >> >>> >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> >> >