首页 新闻 赞助 找找看

websocket服务发送图片base64,导致一直阻塞

0
悬赏园豆:20 [已解决问题] 解决于 2021-06-29 16:44

大佬们,请教一个关于websocket的问题。我用supersocket作为websocket服务器,然后服务器发送图片到客户端(整个数据包大概一百多kb)。
然后在测试环境(公司自己搭建的k8s集群)和自己本机都能正常发送,但是发布到阿里云上就出现无法发送数据的问题,通过日志,发送在Send的时候就阻塞了(但是,客户端发上来了的图片在各个环境都可以正常接收)。
然后我将sendBufferSize改成了400kb,就能正常发送了,receiveBufferSize还是4kb。
服务器与客户端之间每隔30s有个心跳交互。
我想不明白为什么会出现这种情况,还请大佬指教,谢了。还想问下,改成这么大有没有什么坏处呢?

骑着蚊子去太阳的主页 骑着蚊子去太阳 | 初学一级 | 园豆:89
提问于:2021-06-21 18:50

最新测试,发现16kb可以,8kb及其以下不行。

骑着蚊子去太阳 2年前
< >
分享
最佳答案
1

tcpdump抓包试一下,应该是buf太小带来的频繁ack,在公网环境下每次ack耗时太多导致上层应用看起来像是卡住了似的,其实可能是底层频繁ack导致增加了不必要的RTT。

收获园豆:20
Timetombs | 老鸟四级 |园豆:3954 | 2021-06-21 21:18

好,我试下,还没试过在docker中抓包呢。
但是说实话,客户端连接公司的测试环境,也是走的公网。

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-06-22 09:54

大佬,按照你的意思的话,是不是buf适当的调大一点好些呢?因为我这个服务必定为发送和接收图片资源

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-06-22 10:03

@骑着蚊子去太阳:

  1. docker中可以用tcpdump抓包。
  2. 如果测试也是公网,那么可能就不是这个因素了。
  3. 图片的话那尽可能的大一点。
Timetombs | 园豆:3954 (老鸟四级) | 2021-06-22 10:17

@blackheart: 好的,我还是抓包看下实际情况,谢了

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-06-22 10:23

@blackheart: 大佬,再请教一下呢,我抓包发现的确没有tcp的报文,而且还有个现象就是,Send调用成功了,但是抓包没有报文记录,我把这个pod直接发布在公网上都不行。然后我将我的程序直接跑在windows 服务器上有正常了。这种一般会是什么情况呢?集群版本过低?

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-06-29 16:47

@骑着蚊子去太阳: send并不一定就会直接发送数据,底层tcp协议栈也许在等更多的数据一块发送出去。如果你一个包都没抓到,那么多半是tcpdump命令使用有误。

Timetombs | 园豆:3954 (老鸟四级) | 2021-07-03 05:47

@blackheart: 不,我是抓了很多包的,程序的心跳包都能看到,但是一发数据,服务的包就没有了

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-07-03 08:16

@骑着蚊子去太阳: 也就是说在send前这个pod的tcp建立连接的包都可以抓到,但是client send数据后,pod这边就抓不到了?

Timetombs | 园豆:3954 (老鸟四级) | 2021-07-03 11:28

@blackheart: 是的,但是我这个服务是tcp server。然后我把这个服务改到windows server 2016上可以了,阿里云集群版本是1.12.6,程序的基础镜像是mcr.microsoft.com/dotnet/aspnet:5.0-focal,其他版本暂时还没试过。

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-07-05 09:34

@blackheart: 只是抓不到这个服务相关的包哦。

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-07-05 09:34

@骑着蚊子去太阳:

我有点搞不清你上面的两个回复是针对我哪个评论的。。。

Timetombs | 园豆:3954 (老鸟四级) | 2021-07-06 18:58

@blackheart: 就是你最新的回复:

''''
也就是说在send前这个pod的tcp建立连接的包都可以抓到,但是client send数据后,pod这边就抓不到了?
''''

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2021-07-06 19:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册