Разъяснение на примере python websockets

#python #function #websocket

#python #функция #веб-сокет

Вопрос:

Из примера, найденного здесь: http://websockets.readthedocs.io/en/stable/intro.html

Может кто-нибудь объяснить, что здесь делает параметр ‘path’? Является ли это кортежем для хоста и порта, необходимых websocket.serve()?

 import asyncio
import websockets

async def hello(websocket, path):
    name = await websocket.recv()
    print("< {}".format(name))

    greeting = "Hello {}!".format(name)
    await websocket.send(greeting)
    print("> {}".format(greeting))

start_server = websockets.serve(hello, 'localhost', 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
  

Ответ №1:

В документации для websockets.serve говорится, что его первый аргумент ws_handler :

ws_handler — это обработчик веб-сокета. Это должна быть сопрограмма, принимающая два аргумента: WebSocketServerProtocol и URI запроса.

В функции hello второй аргумент не используется, но он должен принять аргумент, потому что аргумент будет отправлен ему с помощью websockets.serve .

Комментарии:

1. Просто было неясно, какой тип переменной path был. Это кортеж? Или, возможно, у меня просто не было большого опыта работы с фреймворками, которые требуют, чтобы вызываемые функции имели переменные в своей подписи, которые функция фактически не использует.

2. В документе говорится, что это URI, поэтому я предполагаю, что это либо всего одна строка, либо WebSocketURI объект , который является именованным кортежем. Было бы лучше распечатать его и посмотреть, что получится 😉

3. Хорошо, это имеет смысл. Я бы поддержал ваш ответ, но у меня нет репутации.