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