使用Python的多线程UDP服务器

时间:2012-12-06 07:55:23

标签: python networking network-programming udp

我想创建一个简单的视频流(实际上是图像流)服务器,可以管理不同的协议(TCP推/拉,UDP推/拉/多播)。

我设法让TCP推/拉使用SocketServer.TCPServer类和ThreadinMixIn来处理不同线程中的每个连接的客户端。

但是现在我正在研究UDP协议,我才意识到ThreadinMixIn为每个客户端查询调用handle()创建一个线程(因为UDP中没有“连接”)。

问题是我需要为所有客户端处理同一客户端的一系列查询。我怎么能管理呢?

我看到我可以处理的唯一方法是获得(客户端地址,处理线程)列表并将每个查询发送到匹配的线程(如果客户端尚未发送任何线程,则创建一个新的查询) 。有没有更简单的方法呢?

谢谢!

P.S:我不能使用任何外部或太“高级”的库,因为它是一个学校主题,旨在了解套接字是如何工作的。

1 个答案:

答案 0 :(得分:-1)

看看Twisted。这将消除从您的应用程序进行任何线程调度的需要。您仍然必须将数据包与特定会话进行匹配才能处理它们,但这并不困难(每个客户端使用一个端口并根据端口进行调度,或者要求会话中的数据包始终来自同一地址并且使用对等地址,或使用解决此问题的现有协议之一,如SIP)。