websocket服务发送图片base64,导致一直阻塞
大佬们,请教一个关于websocket的问题。我用supersocket作为websocket服务器,然后服务器发送图片到客户端(整个数据包大概一百多kb)。
然后在测试环境(公司自己搭建的k8s集群)和自己本机都能正常发送,但是发布到阿里云上就出现无法发送数据的问题,通过日志,发送在Send的时候就阻塞了(但是,客户端发上来了的图片在各个环境都可以正常接收)。
然后我将sendBufferSize改成了400kb,就能正常发送了,receiveBufferSize还是4kb。
服务器与客户端之间每隔30s有个心跳交互。
我想不明白为什么会出现这种情况,还请大佬指教,谢了。还想问下,改成这么大有没有什么坏处呢?
回答
tcpdump抓包试一下,应该是buf太小带来的频繁ack,在公网环境下每次ack耗时太多导致上层应用看起来像是卡住了似的,其实可能是底层频繁ack导致增加了不必要的RTT。