【发布时间】:2013-02-20 07:49:48
【问题描述】:
我正在 ST Cortex M3 设备上创建服务器。我正在使用 lwip API 和 FreeRTOS。一切正常,但响应时间很长。我目前使用的是 lwip 1.3.2 和 FreeRTOS 7.3。
单个客户端连接到服务器,并且必须经常发送一些时间关键的数据。这些数据包大约为 6 个字节左右。其他时候,我发送超过 20K。
我遇到的问题是这些较小的数据包似乎需要永远发送。我认为这是因为 lwip 正在等待更多数据排队以进行更有效的传输。我不能等待 2 或 3 秒来发送数据;客户端通常会在几微秒或几毫秒内收到数据。
我尝试过使用 lwip_send 和 lwip_write。 (我知道一个与另一个相同,最后传递了一个标志。只是不得不尝试......)我尝试在套接字上设置 TCP_NODELAY 无济于事。我试图将 SO_SNDLOWAT 设置为 '1',但这总是返回 -1,所以我认为它不受支持。
我不想使用 TCP RAW 重做我的所有代码。有没有办法在 TCP RAW 模式之外调用 tcp_output() 函数?有什么方法可以加快速度,或者这就是带有小数据包的 lwip TCP 有多慢?
欢迎提出任何建议。谢谢。
--编辑-- 我还想补充一点,一旦我准备好传输,我会确保我在 FreeRTOS 中的 TX 任务处于最高优先级。在我调用 lwip_send/write 之前没有其他任务正在运行。
【问题讨论】: