Мой асинхронный сервер Python не остановится даже после отключения всех клиентовPython

Программы на Python
Ответить
Anonymous
 Мой асинхронный сервер Python не остановится даже после отключения всех клиентов

Сообщение Anonymous »

Мой асинхронный сервер не отключится, если клиент подключился, даже если клиент закроет сокет. Почему это не остановится? Если клиент не подключается в течение 10 секунд, он отключается и программа закрывается.
Моя процедура:
  • запустить server.py
  • запустите client.py — клиент подключается и немедленно закрывает сокет.
Результат:
  • Сервер зависает и не закрывается
Я обнаружил, что добавление write.close( ) в clientHandler решило проблему, но почему? Где это задокументировано/объяснено?
# server
from os import path as ospath
import asyncio
import socket as Socket
import logger as log

logger = log.getLogger(fileName=ospath.join('log', 'server.log'), initialize=True)

class Client():
def __init__(self, socket:Socket=None, addr:tuple=None) -> None:
self.socket = socket
self.addr = addr
self.connected = False

class App():
def __init__(self) -> None:
self.quit = False
self.clients = []

async def clientHandler(reader, writer):
logger.info('client handler starting')

async def main():
logger.info("server app starting")
app = App()

# start socket server
ipaddr = Socket.gethostbyname(Socket.gethostname())
port = 32843
logger.info(f'starting socket server ({ipaddr}:{port})')
server = await asyncio.start_server(clientHandler, ipaddr, port=32843)

logger.info('waiting for client to connect...')
await asyncio.sleep(10)
logger.info('closing server')
server.close()

await server.wait_closed()
logger.info('server closed')

if __name__ == '__main__':
asyncio.run(main())

# client
import socket

dest_ip = socket.gethostbyname(socket.gethostname())
dest_port = 32843
encoder = "utf-8"

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((dest_ip, dest_port))

client_socket.shutdown(socket.SHUT_RDWR)
client_socket.close()


Подробнее здесь: https://stackoverflow.com/questions/790 ... sconnected
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»