【问题标题】:prioritizing send() over recv() in socket c在套接字 c 中将 send() 优先于 recv()
【发布时间】:2014-02-13 08:10:27
【问题描述】:

我正在尝试实现客户端-服务器套接字应用程序,客户端向服务器发送一些数据流,服务器对流进行一些计算并将结果发送回客户端。规则如下:

客户端必须尝试通过应用此策略使服务器尽可能保持忙碌:客户端必须尽可能保持发送字节,并且必须接收优先级较低的字节(即仅在不可能发送更多字节时(当发送更多字节时)会阻止发送过程))。我该如何应用此政策。我已经实现了具有阻塞版本的客户端-服务器应用程序。

【问题讨论】:

  • 只是出于好奇。为什么需要这个?
  • 您的客户端应该能够发送和接收所有内容,并且仍然有大量的 CPU 时间可用。并且网络可以同时在两个方向传输数据(除非您使用的是非常旧的网络),所以没有必要让一个方向等待。您的客户不需要优先考虑任何事情。

标签: c sockets


【解决方案1】:

使用非阻塞 IO。尤其要了解 select 和 poll 函数。

【讨论】:

  • 发送优先于接收的优先级如何?
  • 如果poll 返回套接字既可读又可写,你写,然后再次调用poll。您只能在不可写时读取(由于缓冲区已满)。
【解决方案2】:

Zan Lynx 的答案是当今最广泛接受的,但还有另一种选择:使用单独的线程进行发送和接收,并赋予发送线程更高的优先级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2016-02-24
    • 2016-04-04
    • 2016-06-04
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多