Усилить UDP-сервер Python
Я новичок в 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 ответ
Некоторые ответы на ваши вопросы:
- UDP-сокеты не имеют соединения и, как таковые, "всегда доступны". Также имейте в виду, что длина сообщения UDP ограничена 65535 байтами IIRC.
- Данные - это просто строка, и ее достоверность будет зависеть от используемого протокола. Ваш
if data: ...
будет работать как тест на получение чего-то, ноrecvfrom()
Вызов будет заблокирован в любом случае, пока он не получит что-то, так что это кажется излишним. - У меня нет никаких знаний о надежности потока Python в целом.
Я бы также проверил SocketServer
модуль и связанный с ним UDPServer
класс - это может облегчить реализацию. SocketServer
является частью стандартной библиотеки Python.