J'essaye d'écrire un serveur multithread en python qui peut recevoir plusieurs requêtes client puis envoyer la réponse dans un paquet UDP (port 53). Je me demandais si tous ces threads peuvent utiliser 53 en même temps. merci beaucoup (cette question peut sembler stupide, je suis un débutant)plusieurs threads peuvent-ils utiliser le même port?
Répondre
S'il vous plaît ne le faites pas. Utilisez Twisted à la place. Il a déjà tout ce genre de choses faites.
Si vous spécifiez l'option 'réutiliser le port', alors oui vous pouvez lier plusieurs sockets d'écoute au même port. Mais dans mon expérience même en faisant cela, seulement un des sockets recevra un paquet donné (sauf si vous recevez des paquets de multidiffusion).
mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
Normalement cependant, quand vous parlez d'un « serveur multithread », vous parlez d'un serveur en utilisant un protocole « orienté connexion » (via TCP, et non UDP) où il y a une prise de serveur à l'écoute pour les connexions , et puis quand une connexion est formée, elle crée un fil pour y faire face.
Pour un serveur UDP multithread, vous auriez probablement un socket unique qui met en file d'attente les requêtes entrantes, et plusieurs threads tirent de la file d'attente et effectuent le travail. Les threads eux-mêmes n'auraient pas besoin de gérer le socket.
(Remarque: En fonction de votre plate-forme, vous devrez peut-être utiliser SO_REUSEADDR au lieu Quelques informations here..)
Downvoter: niez-vous que l'affiche doit utiliser Twisted plutôt que d'inventer leur propre chose? –