Можно ли: получить cookie?Получить ответы, которые не имеют имени события?python-socketio (клиент) - PullRequest
1 голос
/ 11 июля 2019

Я использую клиент python socket.io и хотел бы узнать, можно ли получить сессионный cookie , если да, то как?

Другой вопрос, Можно ли получить ответ из .emit, не проходя через @sio.event или @sio.on()? Как с библиотекой websockets:

websocket.send('Hi')
response = websocket.rcv()
print(response) -> "Hi :)"

Если нет, возможно лисоздать событие / для извлечения сообщений с сервера, которые не содержат имя события?

Например, я отправляю от клиента: sio.emit("GetNbrPlayers"), но сервер отвечает мне [{"data": "5"}] безсобытие перед данными (это сервер / API, который тоже использует socket.io), я хотел бы получить это сообщение, но невозможно с событием / вкл, потому что в ответе нет имени события.

Спасибозаранее!

1 Ответ

0 голосов
/ 12 июля 2019

можно получить сессионный cookie,

Что вы подразумеваете под сессионным cookie?Если вы имеете в виду что-то похожее на файл cookie сеанса Flask, то нет, файл cookie сеанса отсутствует.Сеанс пользователя хранится на сервере, а не в файле cookie.

Если вы имеете в виду файл cookie sid, который содержит идентификатор сеанса, назначенный клиенту, вы можете получить этот идентификатор из атрибута sidВаш клиентский объект, например как sio.sid.

, возможно ли получить ответ из .emit, не проходя через @ sio.event или @ sio.on ()?

Да, вы можете использовать для этого функцию «ack» протокола Socket.IO.Если сервер является сервером Python, вы можете просто вернуть ответ из функции-обработчика.Например:

@sio.event
def GetNbrPlayers():
    return [{"data": "5"}]

В клиенте Python у вас есть два способа получить эту информацию.Вы можете использовать функцию обратного вызова:

def get_response(data):
    print(data)

sio.emit("GetNbrPlayers", callback=get_response)

Или вы можете использовать call() вместо emit(), чтобы объединить обработку emit и обратного вызова в один вызов функции:

data = sio.call("GetNbrPlayers")
...