Python: asíncrono socketserver TCP
-
21-09-2019 - |
Pregunta
http://docs.python.org/library/socketserver.html para tratar de atender las peticiones asincrónicas con la socketserver en Python. En la parte inferior hay un ejemplo, pero no tiene sentido. Se dice que utiliza el puerto 0, que asigna un puerto no utilizado arbitraria. Pero, ¿cómo saber qué puerto va a utilizar para el cliente si no están en el mismo programa? Yo no entiendo muy bien cómo hacer esto, tiene utilidad.
Solución
Dado que el cliente se implementa en el mismo guión que el servidor, se conoce el puerto. En un escenario del mundo real, se debe especificar un puerto para su demonio. Además de dejar que sus clientes saben en qué puerto para conectarse, puede que también necesite saber para que pueda abrir cortafuegos entre los clientes y el servidor.
Otros consejos
En el ejemplo se ha vinculado, que están alcanzando el puerto:
# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
Sin embargo, realmente debería estar buscando en www.twistedmatrix.com si usted es serio acerca de cómo escribir un manejo asíncrono:)
Es necesario para recuperar el puerto que se asigna a la socketserver
una vez que el bind
se hace: en este caso, éste será probablemente a través ip, port = server.server_address
El puerto arbitrario es sólo por si desea crear un servidor sin especificar un puerto:. El sistema operativo asignará un puerto disponible
Por supuesto, también debe haber una forma de especificar qué puerto se una a.
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address
...
client(ip, port, "Hello World 1")
El valor del puerto 0 dice "No me importa lo que el número de puerto que es", por lo que el valor de la port
dirección_servidor es asignado por la llamada ThreadedTCPServer (). No es cero. Posteriormente, se pasa ese valor port
al cliente, que lo utiliza.