sadmadrus / chessBox

chessBox
Apache License 2.0
0 stars 0 forks source link

сделать игру (игровую сессию) #45

Closed loskutovanl closed 1 year ago

loskutovanl commented 1 year ago

для двух имеющихся игроков возможность обмениваться ходами, с выяснением, кто в итоге выиграл;

nekr0z commented 1 year ago

Давайте с описания начнём, тут всё не сказать, чтоб тривиально.

Понятно, что вот создана (каким-то образом, пока не важно, каким) игра, стартовавшая из такой-то позиции (YAGNI? Только из стартовой?), вот этот игрок белыми, вот этот — чёрными, поехали…

Вот игрок белыми прислал ход (возможно, просто http-запросом в query (from, to, promoteTo)), сервис этот ход валидирует, запускает проверку, что игра не кончилась (маты, паты, 50 полуходов без взятий). Теперь ход чёрных. Надо чёрному игроку об этом сообщить? А как?

nekr0z commented 1 year ago

Надо чёрному игроку об этом сообщить? А как?

В общем, вариантов два: либо чёрный время от времени запрашивает сервер «Шрек, мы уже приехали? А когда мы приедем, Шрек?!», либо сервер посылает уведомления.

Первый вариант хорош тем, что мы остаёмся в HTTP. А плох, во-первых, паразитным трафиком и нагрузкой на сервер, но ещё более плох тем, что часы можно сразу выкинуть тогда: «В каком смысле „истекло время”? Да я только через минуту запрошу у сервера, не сделал ли оппонент ход!»

Второй вариант плох тем, что в рамках HTTP этого не сделать. Более-менее логично делать это на websockets, но — к сожалению — в Go сейчас нет нормальной websockets-библиотеки (точнее, есть одна, ребята из mail.ru запилили, но она довольно специфичная). Ну и там тоже свои ограничения (например, гораздо быстрее уткнёмся в ограничение на количество открытых соединение).

Мнения?

sadmadrus commented 1 year ago

Надо чёрному игроку об этом сообщить? А как?

В общем, вариантов два: либо чёрный время от времени запрашивает сервер ~«Шрек, мы уже приехали? А когда мы приедем, Шрек?!»~, либо сервер посылает уведомления.

Первый вариант хорош тем, что мы остаёмся в HTTP. А плох, во-первых, паразитным трафиком и нагрузкой на сервер, но ещё более плох тем, что часы можно сразу выкинуть тогда: «В каком смысле „истекло время”? Да я только через минуту запрошу у сервера, не сделал ли оппонент ход!»

Второй вариант плох тем, что в рамках HTTP этого не сделать. Более-менее логично делать это на websockets, но — к сожалению — в Go сейчас нет нормальной websockets-библиотеки (точнее, есть одна, ребята из mail.ru запилили, но она довольно специфичная). Ну и там тоже свои ограничения (например, гораздо быстрее уткнёмся в ограничение на количество открытых соединение).

Мнения?

ну получается 2 варианта: либо хттп с постоянным тыканием палочкой, либо велосипед. Боюсь до велосипедов мы не доросли в большинстве своем

nekr0z commented 1 year ago

либо велосипед

Websockets — это не то чтоб прям велосипед, это довольно хорошо отработанная технология. Просто в стандартной библиотеке Go это бросили пилить, потому что все пользовались горилловской реализацией, а горилла кончилась :)

sadmadrus commented 1 year ago

либо велосипед

Websockets — это не то чтоб прям велосипед, это довольно хорошо отработанная технология. Просто в стандартной библиотеке Go это бросили пилить, потому что все пользовались горилловской реализацией, а горилла кончилась :)

ну и я про то же. Выходит велосипед :) ну или сокеты Шреденгира