加强python UDP服务器

时间:2012-05-02 08:46:36

标签: python network-programming udp robustness

我是python(2.6 / 2.7)中的初学者,他已被抛入深层,为现有的python应用程序创建网络服务。

我已经启动并运行了一个UDP服务器,但效果很好,但我正在寻求帮助,使它更具防弹性。

这是我写的基本代码,通常的标准锅炉板:

import sys
import socket
from threading import Thread

def handleInput():
         sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
         sock.bind( ("127.0.0.1",5005) )
         # socket always binded?
         while True:
                 data, addr = sock.recvfrom(512)
                 # is 'data' usable?

t=Thread(target=handleInput)
t.daemon=True
t.start()
# can thread die?

首先,我知道套接字在某种意义上总是可用的,它不需要监听,所以没有失败的东西,你必须重新连接。这是对的吗?

其次,来自recvfrom的返回数据的问题。这是一个简单的'如果数据:那么'来检查它是否有效?

第三,最后,线程。线程可以轰炸吗?如果它确实是最好的重启方式吗?

欢迎任何其他提示。

(注意:我不能使用外部库,例如扭曲等。)

1 个答案:

答案 0 :(得分:4)

您的问题的一些答案:

  1. UDP套接字是无连接的,因此“始终可用”。另请注意,UDP消息长度限制为65535字节IIRC。
  2. 数据只是一个字符串,其有效性取决于使用的协议。您的if data: ...将作为接收内容的测试,但recvfrom()调用将会阻止,直到收到某些内容,这似乎是多余的。
  3. 我一般不了解python线程的可靠性。
  4. 我还会检查SocketServer模块和相关的UDPServer类 - 这可能会使实现更容易。 SocketServer是python标准库的一部分。