项目场景:
对接其他厂家的一个WebSocket服务。我们这里是WebSocket客户端,对方是WebSocket服务端。当客户端连接到服务端后,发送相应的参数到服务端,服务端就会往客户端返回数据。
问题描述:
当服务端不停的往回返回数据时,且每次返回的数据量都很大时,造成客户端处理数据不及时,不能实时的处理掉服务端返回的数据。
原因分析:
客户端处理接收到的消息,用的java客户端处理的,也就是在handleMessage()方法中处理,此方法的调用是单线程的。也就是说,服务端第一次返回数据时,客户端调用了handleMessage方法,来解析数据。如果handleMessage方法解析数据特别慢,等服务端第二次返回数据时,第一次的数据还没解析完,那么第二次调用handleMessage方法就会阻塞,等待第一次handleMessage执行完后,才会调用第二次的。所以,造成了数据越积越多,不能实时处理的问题
解决方案:
在handleMessage方法中,用线程池多线程解析数据,异步解析,这样handleMessage方法就不会阻塞了。