python-3.x - 通过网络将数据并行发送到多个接收者

标签 python-3.x sockets opencv networking network-programming

你好,我正在使用网络编程,很难创建一个允许将视频从单个服务器流式传输到多个客户端的逻辑 毫不拖延 .
这意味着我必须在流向所有连接的客户端的过程中实现并行执行,以便同时显示图像。
为什么这对我的项目很重要,因为我打算拥有大量客户(从 200 到大约 700),现在有 10 个客户,延迟没什么,但有 700 个客户可能会将延迟显着增加到几分钟(不是确定但可能)。
对于那些不知道dely原因的人,它来自 for 循环 我正在使用它包含每个帧的发送功能,这是一个串行执行。
我试过线程 多处理 甚至事件日程但是每件事都变得一团糟,以前我用的是 socket & opencv ,但由于某种原因,它在流式传输期间引起了问题,现在我切换到 网件 & 维奇但我还在挣扎。
希望有人可以提供帮助。
PS:多播不适合这项工作,在我尝试之后,由于传输图像的长度,我收到错误,UDP协议(protocol)将不是 接受超过 65535 字节。

最佳答案

根据您的评论,一切都在同一个网络中,我们为您的问题提供了多播。您可以将单个流量流发送到多个接收器,而不是一遍又一遍地向多个主机发送相同的数据。
您将客户端设置为订阅多播组,通常是 239.0.0.0/8 中的组。组织-本地范围。然后,您的服务器将其流量发送到客户端订阅的同一个多播组。每个订阅多播组的客户端都将接收和处理单个流量流。
由于多播发送到多个客户端,因此您必须使用无连接传输协议(protocol),例如UDP。面向连接的传输协议(protocol),例如TCP,在两台主机之间创建连接,因此它们不能与多播一起使用,多播是一对多的。
默认情况下,多播仅在同一网络中有效。我们确实有组播路由将流量发送到其他网络,但它与通常的单播路由有很大不同。此外,您不能在公共(public) Internet 上进行多播,因为 ISP 没有多播路由。您可以通过使用支持多播的隧道将多播到 Internet 上的不同站点,例如GRE。源路由器和目标路由器都需要配置多播路由,以及多播数据包路径中的任何路由器(Internet 路由器上看到的是单播隧道数据包,而不是多播数据包,因此您可以通过互联网)。

关于python-3.x - 通过网络将数据并行发送到多个接收者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64805512/

相关文章:

ruby - 如果用 Python 3 或 Ruby 编写,谁能解释为什么相同的代码会产生不同的结果?

python - 在 Python 中将整数转换为二进制

c++ - 如何使用多个 SVM 分类器 - 每个分类器都有一个特定的内核 - 作为 "one vs rest classification"方案?

c++ - 异步 I/O Linux

python - 有什么方法可以使用Python中的颜色曲线来操作图像吗?

Android Camera.PreviewCallback 调度(使用 OpenGL 和 OpenCV)

python - 如何创建整数列表的二维列表并设置特定值

python - 使用 Python 2 运行的 Pylint 检查 Python 3 源代码

Java多线程有状态服务器——网络设计

c - python3和c通过socket互相传输数据