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