Communiquer sur un serveur local en python

Je crée une application de création de notes en python. Ici, un gars sur l’ordinateur exécutant l’application peut créer le serveur immédiatement après les modifications à l’écran ([couleur, pixel], où pixel = [x, y]) sera transmis à d’autres personnes connectées au serveur.

J’utilise kivy pour créer l’application. Ma question concerne la transmission des données sur le serveur. Je peux créer un serveur en utilisant ceci:

import socket ip_address=socket.gethostbyname(socket.gethostname()) execfile( "manage.py runserver "+ip_address+":8000" ) 

Maintenant, comment les autres se connectent au serveur et demandent les données (en supposant que le code ci-dessus est correct). Aussi, comment envoyer les données dans django.

Eh bien, Django est un framework qui permet de créer un site ou une API accessible via le protocole HTTP. Cela a plusieurs conséquences pour vous:

  1. Le serveur ne peut pas envoyer un message au client, sauf si le client le demande. HTTP est un protocole “demande-réponse”. Le client envoie une demande (par exemple, http://server.com/getUpdates?id=100500 ) et obtient une réponse du serveur.

  2. La création de clients qui demandent au serveur de leur fournir des mises à jour en permanence est une mauvaise pratique, conduisant probablement au serveur DoS.

  3. Bien que vous puissiez utiliser WebSockets, utiliser Django pour une telle tâche est vraiment exagéré.

En résumé, vous avez besoin d’un canal duplex fiable pour envoyer des données dans les deux sens. Je commencerais avec le serveur TCP, plutôt que HTTP. Heureusement, Python stdlib possède un module que vous pouvez démarrer avec – socketserver .

Lecture supplémentaire

  1. TCP
  2. UDP (vous voudrez probablement cela pour la diffusion)
  3. socketserver Berkeley (un module socketserver sous-jacent standard)

TCP vs UDP

Lors du choix du protocole à utiliser, les aspects suivants doivent être pris en compte:

  • TCP est fiable . Les messages ne disparaissent jamais implicitement. S’il y avait une erreur de réseau, le message sera renvoyé. S’il n’y a pas de connexion, une erreur explicite sera générée. TCP utilise plusieurs algorithmes pour s’intégrer dans le canal réseau. C’est un protocole intelligent.

  • UDP n’est pas fiable . Il ne possède aucune fonctionnalité TCP. Les paquets peuvent disparaître, se réorganiser. Mais les messages UDP sont légers et, entre des mains expérimentées, ils font appel à des systèmes tels que des jeux d’action réseau et des vidéos en streaming (les messages perdus et réorganisés ne sont pas cruciaux ici et TCP devient trop lent).

Je recommande donc de commencer avec TCP. Il est beaucoup plus facile de travailler rapidement et correctement que le protocole UDP. Basculez vers UDP si vous avez une certaine expérience de TCP et que de nombreuses personnes utilisent votre application et souhaitent obtenir la latence la plus faible possible.