请问在恶劣的(大概一个房间中有百来人) WiFi 无线局域网中用 UDP,掉包率和延时能变得多坏,以及怎样应对?

2015-10-06 04:20:13 +08:00
 quadpixels
大家好,前几天我写了一个程序,需要在两台电脑之间用 UDP 传数据。这两个电脑中有一台充当 server ,有一台充当 client , client 的工作是一直往 server 发数据(尺寸不是很大),同时每隔半秒钟还发一个“心跳包”。我在 server 上做了一个设置,就是如果 2 秒内没有收到任何心跳包,就认为 client 不在线了,然后就退出。

这样的设置,我在家里的 WiFi 测试没有问题,但是在真正使用时就出了问题。
这个真正使用的环境是在一个大概面积 100 平米的房间里举行的一场晚会, client 与 server 就连接到这个房间里的同一个 WiFi 上。晚会开始之前有排练,在排练的时候,房间里有大概有十来个人,那时这个程序还能正常工作,但有时好像会偶尔丢一两个包。但是等后来房间里的人多到快 100 个的时候, WiFi 的性能好像就明显下降,我甚至没法在 client 机器上 ping 到 server 机器;而这个程序在一次侥幸连接上并运行之后正常工作了大概十秒钟,就因为在接下来的 2 秒钟内没有收到心跳包而不能正常工作了。

因为当时我不知道有 iperf 之类的工具,所以我也不知道丢包率之类的信息。因为没有事故现场的记录,所以我现在也不是很清楚当时为什么会出现 2 秒内的 4 个心跳包全没收到的情况。后来为了查明原因并让程序更稳定一点,我就用了 tc 手工增加延时(到 10 秒)和丢包率(到 25%),在此种环境下将程序的 2 秒超时改成了 20 秒,并且改正了一些同步时的处理流程(简单说就是如果有很多包一起送来,只取最新的,然后计算 delta )。但是我还是不知道是否用 tc 模拟一下延时和丢包率是否真的能重现当时的恶劣的 WiFi 下的情况(因为网上还有人说延时能多至 40 秒的),以及这样的应对措施是不是够了。

后来有一次回到了同一个房间,那时房间里只有 3 个人,这个程序又完美工作了。所以我想肯定是只有在那个房间里人多的时候才有问题。

这个问题弄砸了晚会上的一个表演,程序当众出问题,好尴尬,要哭死了 :(((((
6608 次点击
所在节点    问与答
28 条回复
powergx
2015-10-06 11:58:56 +08:00
要使用密集覆盖设备, 蜂窝状 1 , 6 , 11 布置。一定要用 ac 控制 覆盖范围以及负载平衡
irainsoft
2015-10-06 17:34:10 +08:00
WiFi 杀手....
fantasticfears
2015-10-06 18:28:57 +08:00
@quadpixels 那是 MAC 层的...

楼上们说的加 AP 是蛮正的解法,至于怎么部署...有点难,多试试好了
quadpixels
2015-10-07 00:02:57 +08:00
@CupTools 看到一篇文章中的几张试验结果图,即使是用了 CSMA/CA 在人多的时候竟然也有某些客户传输率降至 0 的区间 …
@flynaj @Themyth 改天我看看能不能找到 AP 的型号
@rssf @powergx 原来还有接入点控制器这个东西,看起来是能在未来某个时刻解救俺于水火之中的,赞一个
@deben 这个方法真是够暴力哈 … 不过不知如果一段时间内的所有包全都丢掉,送 1 个还是送 10 个是否都是一样 …
@squid157 AP 彻底爆炸是啥样?
quadpixels
2015-10-07 00:05:20 +08:00
@jasontse 我有怀疑是 AP 扛不住,但是无线延迟应该是渐渐变恶劣的吧,所以即使可以回避完全扛不住的情况,也还是需要准备应对“开始有点扛不住了”和“快要扛不住了”这样的情况的吧
squid157
2015-10-07 00:09:16 +08:00
@quadpixels 所有人都觉得卡的要死,例如我们学校上非常无聊的课的时候,教室里的 WLAN ,几个人能连上也是卡,剩下的都别想连上。那个还是中国移动的 WLAN ,优化过的,架不住几个教室里坐满的无聊的人。
xuhaoyangx
2015-10-07 03:03:46 +08:00
@ljbha007 一般 ap 也就 70 人,在上顶不顺,几 k 一个的那种 ap 另说
powergx
2015-10-07 03:13:16 +08:00
无线通道 信道是共享的, 2.4g 20mhz 11n 一个信道最多跑 200mbits ,实际速率大概 12mbyte/s 假设 20 人分,每人才 600k

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/225826

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX