Не могу получить все данные с сервака в клиенте
Учусь писать простой сервер и клиент на python3. Пишут с помощью websoket. Но после отправки первого сообщения - клиент перестаёт получать данные, хотя сервер их отправляет, и клиент прекращает работу. Данные берутся с сервера с MySQL, затем получаются серваком и перенаправляются на клиент. Как исправить эту проблему?
КОД
Сервер:
import asyncio # Библиотека стандартной архитектуры асинхронного ввода - вывода в Python
import websockets
import pymysql
async def hello(websocket, path): # На стороне сервера websocket выполняет
# сопрограмму обработчика hello один раз для каждого соединения
ask = await websocket.recv()
if ask == "Yes":
con = pymysql.connect(host='ip', user='user',
password='pass', db='db')
with con:
cur = con.cursor()
cur.execute("SELECT * FROM users")
greeting = cur.fetchall()
for i in greeting:
res = ''
for k in i:
res = res + str(k) + " "
await websocket.send(res)
print(f"> {res}") # f - Форматирование строкового литерала
start_server = websockets.serve(hello, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Клиент:
import asyncio
import websockets
async def hello():# На стороне клиента websocket выполняет
# сопрограмму обработчика hello один раз для каждого соединения
uri = "ws://localhost:8765" # URL ресурсавеб-сокета использует собственную схему начиная с
# ws или wss для безопасного подключения
async with websockets.connect(uri) as websocket:
name = input("Вы хотите получить данные? Ответьте Yes или No: ")
await websocket.send(name)
print(f"> {name}") # f - Форматирование строкового литерала
greeting = await websocket.recv()
print(f"< {greeting}")
asyncio.get_event_loop().run_until_complete(hello())
Ответы (1 шт):
Автор решения: For i in bugs...
→ Ссылка
В коде сервера нет цикла. Корутина hello выполняется 1 раз через start_server = websockets.serve(hello, "localhost", 8765) asyncio.get_event_loop().run_until_complete(start_server)
Строка asyncio.get_event_loop().run_forever() здесь бесполезна. Делай цикл!