可靠地将相同的数据广播到 C 中的多个套接字
Reliably broadcasting the same data to multiple sockets in C
我正在通过 TCP 套接字接收大量数据,我希望将这些数据发送到多个其他套接字(基本上是回应第一个套接字的内容)。我的要求如下:
- 通过读取套接字接收的任何数据都必须可靠地(按到达顺序)发送到写入套接字
- 在任何情况下写入都必须不阻止从主套接字读取
- Disconnections/broken 管道不应该中断从入站套接字的读取
目前我正在使用一个多线程系统,该系统维护从入站套接字读取的数据链表,并为每个出站套接字提供线程。当消息通过入站套接字到达时,我向出站套接字线程发出信号,从主线程创建链表的副本,并在不中断操作的情况下广播数据。我的链表结构在主线程上维护了一个 fd_set
的文件描述符,它用来确定消息何时被每个出站套接字成功复制和广播(从而将其从列表中删除)。
这显然有很多变化的部分,我想看看我是否遗漏了一些可以在这种情况下使用的基本知识。
你想做的和我这二十年一直在做的类似。
不要锁定和复制整个列表。相反,让每个发送线程只读取它当前发送的元素。让接收线程写锁定每个新元素并执行元素删除。允许一个长列表来容纳瞬态爆发。
您可以通过将列表内存映射到文件来使列表持久化。
祝你好运。这项任务非常重要。
我正在通过 TCP 套接字接收大量数据,我希望将这些数据发送到多个其他套接字(基本上是回应第一个套接字的内容)。我的要求如下:
- 通过读取套接字接收的任何数据都必须可靠地(按到达顺序)发送到写入套接字
- 在任何情况下写入都必须不阻止从主套接字读取
- Disconnections/broken 管道不应该中断从入站套接字的读取
目前我正在使用一个多线程系统,该系统维护从入站套接字读取的数据链表,并为每个出站套接字提供线程。当消息通过入站套接字到达时,我向出站套接字线程发出信号,从主线程创建链表的副本,并在不中断操作的情况下广播数据。我的链表结构在主线程上维护了一个 fd_set
的文件描述符,它用来确定消息何时被每个出站套接字成功复制和广播(从而将其从列表中删除)。
这显然有很多变化的部分,我想看看我是否遗漏了一些可以在这种情况下使用的基本知识。
你想做的和我这二十年一直在做的类似。
不要锁定和复制整个列表。相反,让每个发送线程只读取它当前发送的元素。让接收线程写锁定每个新元素并执行元素删除。允许一个长列表来容纳瞬态爆发。
您可以通过将列表内存映射到文件来使列表持久化。
祝你好运。这项任务非常重要。