Усилить 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 ответ

Некоторые ответы на ваши вопросы:

  1. UDP-сокеты не имеют соединения и, как таковые, "всегда доступны". Также имейте в виду, что длина сообщения UDP ограничена 65535 байтами IIRC.
  2. Данные - это просто строка, и ее достоверность будет зависеть от используемого протокола. Ваш if data: ... будет работать как тест на получение чего-то, но recvfrom() Вызов будет заблокирован в любом случае, пока он не получит что-то, так что это кажется излишним.
  3. У меня нет никаких знаний о надежности потока Python в целом.

Я бы также проверил SocketServer модуль и связанный с ним UDPServerкласс - это может облегчить реализацию. SocketServer является частью стандартной библиотеки Python.

Другие вопросы по тегам