og

记一次奇葩的联调websocket的记录

场景描述

某银行内部债券做市系统,在配置多达700只债券的情况下,前端页面开启债券策略开关往后端发送一条状态变更的socket消息,但是后端接收方法里迟迟没有收到这条消息,过了大概4,5分钟后后端突然收到了这条消息,仿佛消息隐藏在了虚空中。

扯皮

经过前后端的各自用各自的工具排查后,都说自己没有问题,前端说我这边确实发了,后端说券少的时候我秒接受到,券多的时候就收不到,是不是你前端哪里阻塞了。

思索

一开始我有想过,因为有700多只的券,那么这些券的行情是海量的,每秒很产生很多的行情推送到前端页面,我想是不是这个原因导致的我发送的阻塞,但是很快我想到websocket的发送和接受是不会互相阻塞,要阻塞也是阻塞自己,因为他们的缓冲池是互不干扰的,所以我就坚定了是server问题的信念

真像

经过我和后端一顿调试,发现是java在websocket的接收回调里执行了耗时的操作会阻塞下一个接收回调的执行!!!!!

所以各位java老哥,在websocket的接收回调里如果有耗时操作请另起一条线程去做这个事情

Article created at   2021/3/4 PM  in category  code ,   494  Views

Related tags: ws js

Article Address: https://www.hooyim.com/article/9