通过WebSocket实现浏览器与服务器的通信

现如今有个需求,基于websocket实现浏览器与服务器的通信。由于之前没有使用过websocket,在网上大致搜索了一圈,寻找websocket的集成方案。网上寻找的方案大致如下:
1.基于spring的方式实现,加入spring-websocket依赖,加注解,配置相应的拦截器和路径;
2.基于springBoot的方式,本质上还是基于spring;
3.基于J2EE应用服务器,好像从tomcat7开始有提供websocket支持,直接用@WebsocketEnd 可实现,该注解由servlet包提供;

它们有一个特点,那就是基于servlet实现的(第3种方式尚未求证).

然而,由于种种原因,我需要基于struts2实现,也就是基于Filter实现这个过程,百度了良久,发现的方案是: 在struts2的拦截器中使用元字符开辟一个路径,然后再进行拦截, 尝试未果!
<constant name="struts.action.excludePattern" value="/ws/.*,ws://.*"></constant>

最后,采用的spring+注解的方式实现websocket方案。

又由于其他的原因,导致势必要将基于 spirngmvc,也就是servelt的方案转到 struts,也就是Filer去。 因此,经过一番思索加上实践,终于找到了相应的解决方案这里记录一下,以期能够帮助同僚们解决相应的需求:

首先使用堆栈追踪,找到websocket这个servlet执行流程:

堆栈如下:
在这里插入图片描述
然后,结合springmvc的执行流程进行分析:
在这里插入图片描述
经过分析,我们可以将整个模型逻辑从servelt 搬迁到 相应的Filter上,但是面对诸多的配置,如何平滑的迁移是个问题,我是这样处理的,在mvc这边执行时打上断点,查看相应内存中的变量类型,然后手动构造:
原来的代码长这样:
在这里插入图片描述
经实践,那些众多的配置以及 @Configuration 用于与springmvc的相应配置,以及这里本地参数的初始化。 因此我完全可以手造一个。

我造的代码如下:
在这里插入图片描述
在这里插入图片描述
其它的逻辑就直接基于struts即可。
经过实践,是可行的,且用起来很顺手,暂未发现其余问题。

应用案例效果图

原文地址:https://www.cnblogs.com/skycto/p/11470356.html

时间: 2024-10-01 21:16:51

通过WebSocket实现浏览器与服务器的通信的相关文章

利用webSocket使网页和服务器通信

WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).具体说明请查阅相关资料,下面我来演示一种简单的页面与服务器通信的简单样例. 新建个web工程(基于tomcat-7版本(6以下的版本未实现webSocket功能)) 引入tomcat/lib目录下的tomcat7-websocket.jar和websocket-api.jar添加到classpath中 新建WebSocketConfig.java如下 本次采用注解方式 im

【转载】浏览器与服务器通信的过程

首先当用户在浏览器的地址栏中敲入了网站的网址 ( 比如: alibaba.com ) ,这时浏览器会首先通过访问的域名来定位到IP (DNS) 从而找到去哪里获取资源, 这时, 浏览器会依次进行如下查找: 1. 浏览器缓存 : 浏览器首先会在自己的缓存中查找有没有对应的域名 – IP匹配, 如果好运的话, 这里就可以直接尝试去访问资源了, 如果运气平平则往下走吧. 2. 系统缓存 : 浏览器缓存中没有命中, 浏览器会告诉操作系统:”嘿, 我在我自己口袋里没找到, 可能丢了, 我得去你那看看”,

Spring之WebSocket网页聊天以及服务器推送

Spring之WebSocket网页聊天以及服务器推送 转自:http://www.xdemo.org/spring-websocket-comet/ /Springframework /Spring之WebSocket网页聊天以及服务器推送 1. WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 2. 轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端

浏览器与服务器的消息通信

最近工作中遇到一个场景,商家在商家后台需要实时的获取到有没有新订单,有的话是几个:这个需求类似与日常中使用QQ或者微信时的新信息提醒一样,只要有新信息就需要提醒:商家基本在PC上使用,各式浏览器都有:如 IE系列(7.0,8.0,9.0及以上),chrome内核,firefox等:功能所属的部署在Tomcat 6.0上,如果技术需要可以部署到 Tomcat 7.0上; 我们先做做技术调研,这种浏览器与服务器实时通信的方式有哪些方式. AJAX轮询 这是我们最自然想到的. 采用常规AJAX轮询的方

浏览器,服务器,网络

### 同源策略是什么? ### javascript跨域通信 同源:两个文档同源需满足 - 协议相同- 域名相同- 端口相同跨域通信:js进行DOM操作.通信时如果目标与当前窗口不满足同源条件,浏览器为了安全会阻止跨域操作.跨域通信通常有以下方法- 如果是log之类的简单单项通信,新建<img>,<script>,<link>,<iframe>元素,通过src,href属性设置为目标url.实现跨域请求- 如果请求json数据,使用<script&g

springboot整合websocket实现客户端与服务端通信

定义 ?WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器. 它可以让多个用户连接到同一个实时服务器,并通过API进行通信并立即获得响应. 案例介绍 ? 后端在接收到用户新下的订单后,通知到后台系统 服务端代码 pom.xml <dependency> <groupId>org.springframework.boo

Android开发之简单的聊天室(客户端与服务器进行通信)

1.使用ServerSocket创建TCP服务器端 Java中能接收其他通信实体连接请求的类是ServerSocket, ServerSocket对象用于监听来 自客户端的Socket连接,如果没有连接,它将一直处于等待状态.ServerSocket包含一个监听来自客户端连接请求的方法. 1) Socket accept():如果接收到一个客户端Socket的连接请求,该方法将返回一个与连接客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞. 创建ServerSoc

如何实现浏览器向服务器伪造refer?

Request URL:https://www.getwnmp.org/ Request Method:GET Status Code:304 Remote Address:45.55.134.251:443 Response Headers date:Mon, 15 Aug 2016 16:08:20 GMT etag:"5786713f-ef5" last-modified:Wed, 13 Jul 2016 16:50:07 GMT server:nginx status:304

浏览器和服务器之间传输数据

由于web系统采用http协议在浏览器和服务器之间传输数据,而http协议是一种无状态的协议,如何在不 同页面之间传递数据,可以有一下几种方式:   方式一:表单方式传递   表单传递参数是一种最简单,也是最基本的参数传递方式.注意:表单元素隐藏按钮的使用   方式二:带参数的url方式传递   带参数的url写法: url?参数名1=值1&参数名2=值2.   方式三:请求request对象   可以将数据绑定到request对象上,通过request对象getAttribute和setAtt