小编Tay*_*ter的帖子

使用Android的巨大UDP延迟/延迟

我正在开发一个Android应用程序,它通过WLAN向Windows端点发送/接收大量UDP流量(不,我不能使用TCP).

问题是当我增加流量时,我开始看到当我调用sendto(应用程序是用NDK写入)和我看到数据包到达Windows端点之间的巨大延迟.在10秒左右!反过来也会发生同样的事情:我发现Windows端点发送的数据包与recvfrom()接收的数据包之间存在巨大延迟.

  • 更改SO_SNDBUF无效,因此我认为这不是应用程序级缓冲控制的问题.
  • 我已经验证了各种Android设备上存在的问题,所以我认为这不是硬件/无线驱动程序的问题
  • 使用嗅探器并关联时间戳,我确认在调用sendto()和从Android设备发送的数据包之间发生延迟,因此AP或Windows端点中不会发生缓冲

所以在这一点上,我只是出于想法.事实会让我相信缓冲是在Android OS层上发生的,但10秒的10Mbps流量呢?对于内存占用非常大的操作系统来说,这似乎太高了.

此外,如果问题是我发送的数据太快并且压倒了操作系统,那么我希望sendto()返回ENOMEM或ENOBUFS ......但是没有迹象表明Android应用程序级别出现任何问题.

所以我的问题是:导致这种延迟的原因是什么?有没有办法缓解它,或者我是否需要更改我的应用程序以获得更长的超时或某种方式在它变坏之前检测到这种情况?

sockets android udp wifi android-ndk

8
推荐指数
1
解决办法
2323
查看次数

如何使用WebRTC在两个对等方之间协商数据通道?

WebRTC RTCPeerConnection接口有一个createDataChannel方法和一个ondatachannel事件处理程序.这些如何互动?如何创建可用于在两个对等体之间发送/接收数据的单个数据通道?

此外,RTCDataChannelInit构造函数有一个negotiated字段,默认情况下设置为false并表示它会导致频道在带内通知.如果设置为什么会发生什么true

sctp webrtc rtcdatachannel

4
推荐指数
1
解决办法
1147
查看次数

是否存在无法锁定(提升为shared_ptr)的weak_ptr?如果没有,为什么?

也许以前曾经问过这个问题,但我从未找到过满意的答案.此外,为简单起见,我假设我在谈论单线程应用程序.

所以,我多次听到的是,如果你有一个拥有的对象并且它的生命周期得到保证,你应该用原始指针引用它.对象的所有者将使用unique_ptr,并根据需要分发原始指针.

但是,如果该对象是非拥有的,并且生命周期无法保证怎么办?然后你可以使用weak_ptr,是的.但是,任何交给weak_ptr的人都可能是顽皮的并保持锁定状态,这样对象的所有者就不会导致对象被破坏.有时这可能不是问题,但有时也是如此.例如,当拥有的对象表示某个必须在特定时间放弃的系统资源时.

你可能会说"好吧,那么你应该确保没人阻止weak_ptr锁定!" 但是从OO设计的角度来看,这在我看来并不理想,因为它在"所有者"对象和从中获取weak_ptr的任何对象之间创建了依赖关系.您也可以创建参数"您不需要返回const引用;您应该确保没有人修改引用."

有了Qt,你有QPointer,这基本上就是我正在寻找的.它检查对象是否已被销毁,但它无法阻止对象被销毁.我意识到这不是线程安全的,但同样,我在谈论单个线程的上下文.

那么为什么C++ 11没有类似的东西呢?我确信我可以在weak_ptr周围创建一个包装器来完成我所追求的目标.但是我想知道我是不是错了.

c++ shared-ptr weak-ptr unique-ptr c++11

1
推荐指数
1
解决办法
861
查看次数