У меня есть приложение Flask/SocketIO, которое в настоящее время объединяет двух клиентов для совместной игры. Прямо сейчас клиенты взаимодействуют с сервером через какой-то скомпилированный клиентский Javascript, и я использую socketio для определения сокетов, которые вызывают клиенты, например, movedForward, когда этот клиент продвигается вперед. JS на стороне клиента аналогичным образом определяет веб-сокеты, которые сервер будет отправлять, например, partnerTurnedRight, когда сервер передает движение партнера другому игроку.
Я хотел бы создать «фиктивных» клиентов на стороне сервера, которые могут взаимодействовать с обычным удаленным клиентом - в основном, реализация Javascript на Python, которая порождается каждый раз, когда удаленный клиент подключается. Идея состоит в том, чтобы «игрок» на стороне сервера играл в игру с удаленным клиентом-человеком.
Я не уверен, как реализовать что-то подобное. Моя интуиция такова, что я должен создать отдельное приложение Flask/SocketIO (каким-то образом), в котором есть сокеты для сообщений, которые отправляет сервер (например, partnerTurnedRight), и которые выдают сообщения, ожидаемые сервером (например, movedForward). Затем, когда удаленный клиент подключается, создайте подпроцесс с отслеживанием состояния, который имеет свой собственный уникальный sid и может взаимодействовать с сервером с тем же интерфейсом, что и удаленный клиент. Однако я действительно не уверен, как собрать все вместе или как на самом деле создать такого клиента на стороне сервера.
Будем очень признательны за пример проекта, который делает что-то подобное, некоторый псевдокод или общую структуру того, как настроить что-то подобное!
(Отчасти проблема в том, что я не знаю, какие условия поиска использовать, поэтому мне было трудно найти примеры.)






Вы можете использовать пакет python-сокетио на стороне сервера, используя python. Вот пример использования клиента:
import socketio
sio = socketio.Client()
@sio.on('connect')
def on_connect():
print('connected')
sio.emit('Hello')
@sio.on('event')
def on_message(data):
print('Received ', data)
@sio.on('disconnect')
def on_disconnect():
print('disconnected')
sio.connect('http://localhost:5000')
sio.wait()
Да, если вы должны использовать python, это хороший вариант. Я соответствующим образом скорректирую свой ответ.
Спасибо! Мой клиент будет иметь состояние, и я буду создавать его (например, как подпроцесс) при подключении удаленного клиента. Итак, чтобы сделать его с отслеживанием состояния, я предполагаю, что у меня может быть либо [1] какая-то глобальная переменная в этом коде, которая содержит состояние, либо [2] обернуть прослушиватели событий в класс?
Абсолютно @alsuhr
Да, спасибо (использование python-socketio для подключения работает, но я еще не удосужился реализовать весь фиктивный клиент), я приму этот ответ.
Спасибо, но мне нужно, чтобы мой клиент был реализован на python. Я нашел несколько пакетов/проектов Python, которые, кажется, реализуют клиентскую часть в Python (например, github.com/miguelgrinberg/python-сокетио) — я думаю, это правильное направление?