一个浏览器与一台服务器两个端口的连接

tim-c 2013-08-15 11:14:55
各位社区的大虾,新手开发遇到一个比较棘手的问题,项目经理要求我解决,我似乎找到了问题所在,但是几乎找不到技术解释。
最近在开发当中遇到一件较为奇怪且值得深思的问题,那就是在一台服务器上有两个tomcat,每个tomcat部署一个项目,这两个项目属于前后台关系,在然后再同一个浏览器向这台主机的不同端口进行访问,我发现了每当访问一个项目的时候,另一个项目的连接就会失效,例如,我首先登陆一下后台进入管理页面,然后刷新前台的首页,再去后台进行操作已经不能响应,声明一下,我检查前后台的联系,发现首页仅仅是一个html静态页面,于是我又去查找web.xml的过滤所有资源的filter(<url-pattern>/*</url-pattern>),然后找到过滤器,发现也没有与后台进行联系。在同一台机器上使用两款浏览器访问,两个web项目相互没有影响。
如果说这个前后台的内容管理系统(群集的)还不能说明情况,那么我再找了一个easyui的doc作为一个项目和另外一个web项目,同样是部署在本机上的两个tomcat,每个tomcat占用不同端口,首先登陆web项目,然后刷新easyui的doc首页,再去对登陆上去的web项目操作,web项目不能操作,且会定向到登陆页面。然后再次使用两款浏览器一对一进行访问两个web项目,发现登陆上去的web项目不受easyui doc项目的影响。
最后大胆得出一个结论或者巧合:浏览器为了减少连接数对内存的损耗,对于一台机器(不管端口)仅仅进行一条连接,部署在同一台机器不同端口的项目进行访问,浏览器会重置连接端口,保持一台机器只有一条连接。
发帖时想请各位驰骋技术界的各路精英指点迷津,发表高见,如有吐槽的,请文明用语,我会谦虚接受
...全文
310 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tim-c 2013-08-15
  • 打赏
  • 举报
回复
另一个项目的连接失效就是发送请求没有响应,撇开返回登录页面(个人浅见:返回登陆页面是对请求的资源进行访问控制管理,请求必须登录在web服务器存在session)。你说的方案我在理解理解,现在不敢评论,我刚刚进入软件公司,着手的就是对公司已有的产品进行重新整理页面成另一个产品。在部署的时候遇到这个问题。
MiceRice 2013-08-15
  • 打赏
  • 举报
回复
你说的“另一个项目的连接就会失效”是指什么?返回到登录界面了? 应该是 jSessionID 被互相覆盖掉了。 解决方案:给不同应用指定不同的、用于标识SessionID 的Cookie名称。
tim-c 2013-08-15
  • 打赏
  • 举报
回复
补充一点,查找了很多关于浏览器的资料,大部分都是介绍给前端开发者的页面技术知识,没有设置到底层的网络连接,如果各位有资料查阅的,敬请分享!世界人民都会感谢您的!您为普及知识做出了贡献
tim-c 2013-08-15
  • 打赏
  • 举报
回复
ldh911正解,不过不够详细,今天和产品经理把这个问题搞清楚了,原因是由于tomcat与浏览器之间的连接是通过sessionid来识别的。tomcat默认返回的session标识符shiJSessionid,使用同一个浏览器向两个tomcat发送请求的时候,第一个项目的tomcat返回一个JSessionid,然后向另一个tomcat的项目发送请求,这个时候第二个tomcat也返回一个JSessionid回来,这个时候就会把第一个JSessionid的值给覆盖掉了,所以在第一次发送请求的页面再次发送请求,在firebug下是看到没有响应的,因为tomcat里面没有该值的JSessionid的会话,所以没有响应请求。解决方法就是修改其中一个tomcat返回的sessionid名称。 tomcat6和tomcat7修改方法相同 在Context容器标签上增加sessionCookieName参数 <Context path=”/” docBase=”webapp” reloadable=”false”sessionCookieName=”yoursessionname”></Context> 在最后再次大胆猜测一下,由于浏览器每开一个页面(tab)都会保存cookie,第一次向部署第一个项目的tomcat发送请求,页面的cookie保存了第一个tomcat返回来的seesionid名称和值,在新开一个页面,向第二个部署第二个项目的tomcat发送请求,tomcat再次返回sessionid变量名称和值,第二个页面的cookie就保存了两个tomcat返回来的sessionid变量名称和值(在返irebug网络栏下可以查看cookie),由此可以推测浏览器的cookie应该是默认一台主机的连接一个cookie。所以第二个页面发送请求的时候把两个seesionid变量名称和值都发送到第二个tomcat去,第二个tomcat根据自己定义的sessionid名取其值进行匹配。 敬请各位继续发表高见,毕竟上面还有一些知识还不是很肯定。
  • 打赏
  • 举报
回复
由于项目需要,我本地也是使用三四个Tomcat运行的,没出现你这个情况

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧