Pitone: asincrono tcp SocketServer
-
21-09-2019 - |
Domanda
Non vedo http://docs.python.org/library/socketserver.html per cercare di gestire le richieste asincrone con il SocketServer in pitone. In fondo v'è un esempio, ma non ha senso. Si dice si utilizza la porta 0 che assegna una porta non utilizzata arbitraria. Ma come fai a sapere che cosa porta da utilizzare per il cliente se non sono nello stesso programma? Io non capisco come fare questo utile.
Soluzione
Poiché il client è implementato nello stesso script del server, la porta è noto. In uno scenario del mondo reale, è necessario specificare una porta per il demone. Oltre a lasciare i vostri clienti sapere su quale porta per la connessione, si può anche bisogno di sapere in modo da poter aprire i firewall tra i client e il server.
Altri suggerimenti
In questo esempio si è collegato, sono il recupero del porto:
# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
Tuttavia, si dovrebbe davvero essere guardando www.twistedmatrix.com se si è sul serio scrivendo gestione asincrona:)
È necessario recuperare la porta che è stata assegnata al socketserver
una volta che il bind
è fatto: in questo caso, questo sarà probabilmente attraverso ip, port = server.server_address
Il porto arbitraria è solo se si desidera creare un server senza specificare una porta:. Il sistema operativo assegna una porta disponibile
Naturalmente ci deve essere anche un modo per specificare quale porta da associare.
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address
...
client(ip, port, "Hello World 1")
Il valore PORT 0 dice: "Non mi importa quello che il numero di porta è", così il valore port
del indirizzo_server viene assegnato dalla chiamata ThreadedTCPServer (). E non è zero. In seguito, si passa quel valore port
al cliente, che lo utilizza.