【发布时间】:2012-05-02 08:46:36
【问题描述】:
我是 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 返回数据的问题。是不是一个简单的 'if data : then' 来检查它是否有效?
第三,最后是线程。一根线能炸出来吗?如果它确实重新启动它的最佳方法是什么?
欢迎任何其他提示。
(注意:我不能使用外部库,例如twisted等)
【问题讨论】:
-
你希望用上面的
Thread代码完成什么?就目前而言,除了简单地运行handleInput()之外没有任何附加值,但整个脚本仍然会阻塞,直到完成一个客户端。您是否希望同时处理多个“客户”? -
这段代码将被注入到另一个python应用程序中,这就是线程的原因。至于并发,多个客户端的消息不会都排队吗?
标签: python network-programming udp robustness