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
>>
>>
>

Reply via email to