On Fri, Jul 06, 2007 at 07:30:12PM +0200, Matteo Sgalaberni wrote:
> Ciao $amici,
ciao $amico,
> - server python A che ha in listen un socket UDP.
> - client B che apre in un istante 300 thread che fanno una connect al
> server e pushano ognuno un pacchetto UDP. totale 300 pacchetti.
#define "un istante"
> su server A a volte arrivano 300 pacchetti regolarmente, ma a volte
> ne mancano 1-2, una ventina... e cos? via...
Mai successo che ne manchino 300, suppongo.
Quanti te ne perdi al massimo?
> 15data+8header=23byte*300=6900byte di dati)
non credo sia un problema di banda. Ne` (ipotizzo) di latenza.
> perdita? E' perch? ? UDP e quando si riempie un qualche buffer che non
> o di quanto ? su server(app o kernel?) allora scarta pacchetti?
Chiedo: come funziona in python il listen sulle socket udp?
Lo Stevens[1] mi dice che solitamente i server UDP sono iterativi,
e ad ogni porta il S.O. assegna un buffer di dimensione finita.
Forse, come dicevi tu, lo riempi con il burst di pacchetti.
Giusto per capirci, ho riesumato una roba cosi` (mi perdonino
i programmatori in lista...)
====
from socket import *
host = "127.0.0.1"
port = 5555
buf = 1024
addr = (host,port)
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
while 1:
data,addr = UDPSock.recvfrom(buf)
if not data:
break
else:
print data
===
se allarghi buf di potenze di 2, cosa succede?
> come posso ovviare il problema tenendo presente che:
Se tu riscrivessi il listener in C e poi salvassi i dati
da qualche parte, per poi processarli con calma con il pitone?
[1] Ho dato uno sguardo ad Advanced Programming in the UNIX Env,
ma non ne parla. Qui cito il TCP/IP Ill. v.1 (pg 163).
ciau!
--
guido . zen@xxxxxxxxxxxxxxx . skype://zenmobile
|