2012-02-07 2 views
1

일단 sendpy()를 사용하여 10000 UDP (lengh is : 110)를 보내려면 .py를 실행하고 서버는 약 400 개의 메시지를 신속하게 수신하고 이후에는 매우 느리게됩니다. 각 10 초.UDP sendto()가 매우 낮아졌습니다. python

.py를 다시 실행하면 또 다른 400 개의 메시지가 빠르게 수신되면 이상합니다.

이 상황에서 버퍼 또는 UDP 문제가 있습니까?

예. 알았습니다. UDP는 목적지에 대해 불확실하며, 300 개의 메시지 뒤에 패키지가 계속 걸립니다. 그래서 내가 작동하도록 time.sleep (0.2)를 추가해야합니다. 지금 나는 시간 간격에 대해 여러 서버 프로세스를 시도하고있다.

+1

긴밀한 루프에서 메시지를 보내면 예. 버퍼링 문제 일 수 있습니다. 짧은 연속으로 10000 패킷을 전송하는 것이 일반적으로 바이러스 또는 DDOS 트로이 목마 또는 이와 유사한 것의 징후이기 때문에 속도가 느려지는 방화벽 일 수도 있습니다. –

+0

아직 답변이 없지만 비슷한 문제가 발생했습니다. 조금 아래로 드릴 다운하면 파이썬의 모든 sendto()가 while 루프를 호출한다는 것을 알게되었습니다. strace는 netlink 소켓이 만들어지고 recvmsg가 호출되는 것을 보여줍니다. 이 모든 과정은 모든 것을 느리게 만듭니다. 이것은 IPV6에서만 발생하며 IPV4에서는 발생하지 않는 것으로 보입니다. 나는 더 많은 것을 발견 할 때 나는 새롭게 할 것이다. C 프로그램은 이러한 문제를 겪지 않습니다. – StarNix

답변

0

네트워크 카드를 사용하여 다른 사람이 동시에 보낼 수 있으며 시스템에서 한 번에 400,000 개만 보낼 수 있습니다. 다른 응용 프로그램이 NIC를 사용해야합니다. 그것은 UDP 나 그 이상의 문제보다 네트워크 사용에 관한 문제처럼 들립니다.