关于我在开发websocket遇到的问题以及一些解答

关于我在开发websocket遇到的问题以及一些解答

我在开发采用的技术框架是SpringMVC+Spring+MyBatis,处理websocket内容的部分是采用spring-websocket,如需使用的话需要在maven工程中添加如下dependency:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>${spring.version}</version>
        </dependency>

gradle的话可去spring官网上寻找相应代码,没有使用构建工具的话可下载jar包导入到自己的工程。所以我遇到的问题主要是后端上的问题,另外,我所面对的客户端指的是安卓客户端


我自己开发遇到的问题

  • 和客户端双向沟通的问题
    刚开始的时候不是很清楚,后来才发现spring-websocket中的WebSocketHandler中的handleMessage方法,在处理消息时也会将结果通报给制定的客户端,所以这个方法是实现双向沟通的基础。

  • 关于websockethandler中无法注入service的问题
    说实话这个问题我到现在一直都没有解决,只能采取法子规避使用@Autowired注入bean的问题,采取的办法是使用ContextLoader.getCurrentWebApplicationContext().getBean(“需要的service”)来获取指定的service

  • 客户端连接不上的问题
    其实,这个问题。。。我遇到的话问题基本集中在后端,遇到的话需要收集日志进行分析,首先要查看是因为什么原因出现问题的,不过这种情况下多半会出现Exception,从Exception着手分析问题即可。

  • 客户端掉线问题
    这里所指的客户端掉线的问题是指客户端非正常掉线。有的时候会出现Exception,通过处理Exception即可关闭连接,有的时候像客户端突然网络离线的情况下,这个时候后台没有收到客户端发来的close frame,会认为这个客户端还是处在在线的情况。那这个问题可以通过心跳包的问题解决。也可以通过客户端向服务器发心跳包,也可以服务器发送心跳包至客户端。我们最终采用的方案是客户端向服务端发送心跳包,服务端收到心跳包后会检测当前websocketsession队列中是否存在同属性的websocketsession,有的话关闭以前的session即可。我个人认为还是服务端像客户端发送心跳包好一些,但这样做要注意性能问题

  • 一个websocketsession对应多个session的情况
    这是由于尽管每次都能保证有一个websocketsession存在,但客户端没连接一次tomcat都建立一个链接,除非你在请求头里添加cookie:JSESSIONID=xxxxxx

  • 能收到客户端消息,后台也显示发送,但是客户端收不到
    这个问题经我个人观察和猜测,应该是websocketsession没有成功关闭或者成功关闭但是和一个websocketsession对应多个session有关,因为我把上面的问题解决了之后,这个问题也没出现过了。

就先这样吧,以后想起来再补充一点


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值