2

I'm developing a server which involves a lot of broadcasting of identical data to multiple clients over TCP.

Something like:

for(i = 0; i < n; i++)
{
    send(client[i], buffer, ...);
}

Is there any facility to enable me to combine this into a single user/kernel transaction? An analog to vectored I/O is what I'm after (except ofcourse multiple socket handles; not buffers)

Notes:

  • The protocol choice (TCP) is non-negotiable (not my decision)
  • LSPs and the like are not an option.
  • Potential solutions must be compatible with overlapped I/O
  • The reason this is a problem is due to performance requirements (soft real-time; very sensitive to latency and jitter).
4

3 回答 3

4

当您使用 Windows 8 或 Windows Server 2012 时,您可以利用注册 I/O 扩展来摆脱系统调用开销并减少延迟。

于 2013-06-02T10:34:22.680 回答
2

TCP 没有任何广播功能。您必须将传出数据分别复制到每个连接的客户端。如果您不想这样做,则需要切换到 UDP 或 Multicast,两者都支持单发广播。

于 2013-06-01T08:28:35.827 回答
0

我正在开发一个服务器,它涉及通过 TCP 向多个客户端广播大量相同的数据。您通过不同的连接一次发送给一个客户端。

没有通过 TCP 进行广播之类的东西。它是一种单播、点对点协议。

是否有任何工具可以让我将其组合到单个用户/内核事务中?我所追求的是矢量 I/O 的模拟(当然除了多个套接字句柄;不是缓冲区)

不,没有包含“多个套接字句柄”的“矢量 I/O 模拟”。如果有的话,它只会解决你的问题,就 NIC 而言。网络上重复的数据包仍然会构成延迟和带宽问题。

协议选择 (TCP) 是不可协商的(不是我的决定)

因此,根据我们的讨论,这排除了 UDP 广播和 UDP 多播。

LSP 等不是一种选择。

不管什么意思。标记交换路径?分层服务提供商?标签分发协议?

潜在的解决方案必须与重叠 I/O 兼容

由于没有任何潜在的解决方案,因此不会出现问题。

这是一个问题的原因是由于性能要求(软实时;对延迟和抖动非常敏感)。

厄运。最好使用 UDP 多播,因为它还可以节省网络带宽,但我认为这不是一个选择。

于 2013-06-02T08:28:42.923 回答