最近开发中需要通过websocket对接数据,本着面向百度编程的基本原则, 先从网上找了篇博客,学习了websocket客户端的基本创建过程,然后就自己写demo上了(过于简单,此处不表)。
demo写好了之后又找了个在线测试网站ws://121.40.165.18:8800,通过本地服务调用在线服务测试连通性,非常顺滑,直接收到了服务器的返回数据,以为ok了,结果后面测试send方法,向服务器发送数据时,就开始偶发性报错,即有时候能发送成功,有时候则发送失败。
报错内容如下:
从异常栈来看,报错非常明显:WebSocket没有连接上。那么问题来了,之前通过在线网站测试的时候,明明已经收到了返回数据,而且有些时候向服务器发送也能成功,为什么会报错Websocket没有连接上?
带着疑惑定位到报错代码处,一顿源码读下来没有发现什么问题,于是又陷入沉思:java-websocket jar包已经封装的那么好了,我自己代码也没做什么实现,究竟哪里引入了问题?
这个阶段卡了很久,网上也查找了资料,没什么发现,转机出现在不知道被什么指引点进去看了connect的源码:
看到这个异步方法,才疏学浅的我真的虎躯一震!一切都解释的通了,原以为connect方法建立好连接,后面再去发送数据是理所当然,没想到还有这等隐蔽操作。解决办法就是一直判断连接是否已经建立,如果没有则等待,反之则发送数据。