【问题标题】:C: Socket Programming Design Optionss [closed]C:套接字编程设计选项[关闭]
【发布时间】:2013-08-30 12:10:12
【问题描述】:

我们正在设计一个多客户端-服务器模型 服务器应该:

  1. 将配置文件(大小为2000Kb)传输给客户端
  2. 发送 UDP/TCP 端口信息以便进一步通信
  3. 每 2 秒从客户端接收一次统计数据

我们计划使用 UDP(主要是因为速度)。
我期待一些使用 UDP 的设计选项以及与如何进行实施相关的建议。

【问题讨论】:

  • 同时有多少客户端?阅读C10K problem!我不确定你真的需要使用 UDP...
  • 统计信息有多重要?你能不时带着丢失的消息去吗?你能用一个乱码吗?
  • 您有什么具体问题吗?
  • 所有客户端都和服务器在同一个网络吗?还是中间有很多网络?
  • 有几十个并发客户端,我会使用 TCP(甚至可能还有 HTTP)...... UDP 很可能不值得负担(你最终可能会在你的应用程序中重新实现- 在 UDP 上,TCP 提供了许多特性)

标签: c linux sockets udp


【解决方案1】:

使用UDP(主要是因为速度)

== 在这种情况下决策不佳。让我们考虑一下some of the reasons UDP might be considered faster 与您所做的事情的关系,以及 UDP 与 TCP 的约束。

在某些情况下,UDP 在理论上更快,因为它节省了一些 [blah blah] IP 级别的东西。伟大的。但是,您得到了您所支付的费用,并且您无需为 UDP 支付的一些事情是:

  1. 持久连接。

  2. 一致的连接(即信息按发送顺序到达的连接)。

但根据您的规格,在我看来您需要这两个,因此您将不得不以其他方式为它们付费。

您需要#1,因为您正在接受来自特定来源的持续数据流。使用 TCP,这非常简单:客户端连接并开始发送。使用UDP,没有持续的服务器客户端关系,所以决定什么信息属于谁的唯一方法是IP和MAC地址,这可能不是一个非常健壮的方法。

作为补偿,您必须 A) 向每个样本添加更多数据,识别客户端,以及 B) 进行更多用户空间处理,以确定每条数据的所有者。

您需要#2,因为如果时间关系是随机的(样本 A 比样本 B 早 2 秒,反之亦然?),每两秒采样一次数据(可能)没有意义。作为补偿,您必须 A) 向每个样本添加更多数据,指示时间排序,以及 B) 对每个部分进行更多用户空间处理,以正确排序样本。

使用 TCP

【讨论】:

  • 对于 OP,我认为不需要持久连接。另一方面,一致性似乎对 OP 更重要,因此我会单独推荐 TCP。
  • 点了。我确实假设数据的特定来源很重要,但它可能并不重要。我想可以想象顺序也不重要,在这种情况下 UDP 开始有意义。 (虽然:如果起源不重要,那么很难看出一致的顺序有什么意义......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多