2010-12-07 6 views
1

나는 여러 클라이언트 요청을 수신 한 후 응답을 UDP 패킷 (포트 53)으로 보낼 수있는 다중 스레드 서버를 파이썬으로 작성하려고합니다. 이 모든 스레드가 동시에 53을 사용할 수 있는지 궁금합니다. 고마워. (이 질문은 어리석은 것처럼 보일지 모르지만 나는 초보자이다.)하나 이상의 스레드가 동일한 포트를 사용할 수 있습니다.

답변

0

하지 마십시오. 대신 Twisted을 사용하십시오. 이미 모든 일을 처리했습니다.

+0

Downvoter : 당신이 포스터가 아니라 자신의 일을 발명보다 트위스트 사용해야 거부합니까? –

3

'재사용 포트'옵션을 지정하면 여러 수신 대기 소켓을 동일한 포트에 바인딩 할 수 있습니다. 하지만 내 경험으로도 소켓 중 하나만 패킷을받습니다 (멀티 캐스트 패킷을 수신하지 않는 한). 당신이 '멀티 스레드 서버'에 대해 이야기 할 때

mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) 

일반적으로하지만, 당신은 연결을 수신 서버 소켓이 (TCP 이상하지 UDP를)는 '연결 지향'프로토콜을 사용하여 서버에 대해 얘기하고 연결이 형성되면 처리 할 스레드를 생성합니다.

다중 스레드 UDP 서버의 경우, 요청을 대기열에 넣고 대기열에서 끌어와 작업을 수행하는 여러 개의 스레드가있는 단일 소켓이있을 수 있습니다. 스레드 자체는 소켓을 다룰 필요가 없습니다.

(참고 : 플랫폼에 따라, 당신은 대신에 SO_REUSEADDR을 사용해야 할 수있는 일부 정보 here..)

관련 문제