Closed loskutovanl closed 1 year ago
Давайте с описания начнём, тут всё не сказать, чтоб тривиально.
Понятно, что вот создана (каким-то образом, пока не важно, каким) игра, стартовавшая из такой-то позиции (YAGNI? Только из стартовой?), вот этот игрок белыми, вот этот — чёрными, поехали…
Вот игрок белыми прислал ход (возможно, просто http-запросом в query (from, to, promoteTo)), сервис этот ход валидирует, запускает проверку, что игра не кончилась (маты, паты, 50 полуходов без взятий). Теперь ход чёрных. Надо чёрному игроку об этом сообщить? А как?
Надо чёрному игроку об этом сообщить? А как?
В общем, вариантов два: либо чёрный время от времени запрашивает сервер «Шрек, мы уже приехали? А когда мы приедем, Шрек?!», либо сервер посылает уведомления.
Первый вариант хорош тем, что мы остаёмся в HTTP. А плох, во-первых, паразитным трафиком и нагрузкой на сервер, но ещё более плох тем, что часы можно сразу выкинуть тогда: «В каком смысле „истекло время”? Да я только через минуту запрошу у сервера, не сделал ли оппонент ход!»
Второй вариант плох тем, что в рамках HTTP этого не сделать. Более-менее логично делать это на websockets, но — к сожалению — в Go сейчас нет нормальной websockets-библиотеки (точнее, есть одна, ребята из mail.ru запилили, но она довольно специфичная). Ну и там тоже свои ограничения (например, гораздо быстрее уткнёмся в ограничение на количество открытых соединение).
Мнения?
Надо чёрному игроку об этом сообщить? А как?
В общем, вариантов два: либо чёрный время от времени запрашивает сервер ~«Шрек, мы уже приехали? А когда мы приедем, Шрек?!»~, либо сервер посылает уведомления.
Первый вариант хорош тем, что мы остаёмся в HTTP. А плох, во-первых, паразитным трафиком и нагрузкой на сервер, но ещё более плох тем, что часы можно сразу выкинуть тогда: «В каком смысле „истекло время”? Да я только через минуту запрошу у сервера, не сделал ли оппонент ход!»
Второй вариант плох тем, что в рамках HTTP этого не сделать. Более-менее логично делать это на websockets, но — к сожалению — в Go сейчас нет нормальной websockets-библиотеки (точнее, есть одна, ребята из mail.ru запилили, но она довольно специфичная). Ну и там тоже свои ограничения (например, гораздо быстрее уткнёмся в ограничение на количество открытых соединение).
Мнения?
ну получается 2 варианта: либо хттп с постоянным тыканием палочкой, либо велосипед. Боюсь до велосипедов мы не доросли в большинстве своем
либо велосипед
Websockets — это не то чтоб прям велосипед, это довольно хорошо отработанная технология. Просто в стандартной библиотеке Go это бросили пилить, потому что все пользовались горилловской реализацией, а горилла кончилась :)
либо велосипед
Websockets — это не то чтоб прям велосипед, это довольно хорошо отработанная технология. Просто в стандартной библиотеке Go это бросили пилить, потому что все пользовались горилловской реализацией, а горилла кончилась :)
ну и я про то же. Выходит велосипед :) ну или сокеты Шреденгира
для двух имеющихся игроков возможность обмениваться ходами, с выяснением, кто в итоге выиграл;