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

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

它们有一个特色,那就是基于servlet实现的(第3种方式还没有求证).spring

然而,因为种种缘由,我须要基于struts2实现,也就是基于Filter实现这个过程,百度了良久,发现的方案是: 在struts2的拦截器中使用元字符开辟一个路径,而后再进行拦截, 尝试未果!浏览器

<constant name="struts.action.excludePattern" value="/ws/.*,ws://.*"></constant>

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

又因为其余的缘由,致使势必要将基于 spirngmvc,也就是servelt的方案转到 struts,也就是Filer去。 所以,通过一番思索加上实践,终于找到了相应的解决方案这里记录一下,以期可以帮助同僚们解决相应的需求:服务器

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

堆栈以下:mvc

clipboard.png

而后,结合springmvc的执行流程进行分析:socket

clipboard.png

通过分析,咱们能够将整个模型逻辑从servelt 搬迁到 相应的Filter上,可是面对诸多的配置,如何平滑的迁移是个问题,我是这样处理的,在mvc这边执行时打上断点,查看相应内存中的变量类型,而后手动构造。
原来的代码长这样:jsp

clipboard.png

经实践,那些众多的配置以及 @Configuration 用于与springmvc的相应配置,以及这里本地参数的初始化。 所以我彻底能够手造一个。spa

我造的代码以下:

clipboard.png

clipboard.png

其它的逻辑就直接基于struts便可。
通过实践,是可行的,且用起来很顺手,暂未发现其他问题。

应用案例效果图

相关文章
相关标签/搜索