Данный формат выбран потому, что проще всего понять как решать задачу на примере. Поэтому основная суть статьи содержится к комментариях к коду, потому что я считаю неудобным читать отдельно код, и отдельно пояснения к нему. Плюс в статье код расположен в такой последовательности, которая позволяет проще понять устройство сервера.
Выклюл сервер, потому что, как это не печально, посетители использует возможность задания произвольного имени для разжигания межнациональной вражды и рекламы.
Возможно вы приведете пример, как в данном случае можно реализовать оповещение через каналы?
Проект синтетический, пишется для обучения, поэтому не вижу особой необходимости в этом.
Разработчики позиционируют горутины как очень легкие и дешевые треды (которые не обязательноо являются настоящими тредами). И для го-программы нормально иметь тысячи горутин.
Насколько я помню асинхронный с виду браузерный js на самом деле однопоточный, и вызовы просто напросто встают в очередь, создавая видимость асинхронности. Не знаю как обстоят дела в Node.js, но если я правильно понимаю, асинхронность основана на последовательном выполнении функций в очереди вызовов, что не мешает это делать в нескольких потоках.
Для чего в данном случае могут понадобиться каналы?
GOMAXPROCS можно задать через переменную окружения.
serve создает по горутине на каждое входящее соединение, таким образом отвечая на каждое входящее соединение, по сути, асинхронно.
Пакет http сам по себе асинхронен.
Главный цикл — в горутине.
Отсылка ответа в отдельной горутине, что отмечено в тексте.
Поясните, что имеется ввиду под исключением упрощенного параллельного программирования.
Это связано с тем, что при каждом клике, сервер оповещает всех подключенных клиентов об изменениях. Много клиентов — много сообщений от сервера, и клиент просто не успевает обрабатывать такое количество данных.
Решить это можно, например, ограничив количество отсылаемых данных сервером: не при каждом изменении оповещать клиентов, а в фиксированные промежутки слать снапшоты мира.
Помимо этого, лаги можно маскировать на клиенте, используя, например, интерполяцию данных.
Они в общем-то завершены.
Просто качество их реализации оставляет желать лучшего.
Хотя, учитывая что это не продукты для широкой аудитории, а просто, в случае бомбермена, упражнение на прочитанный мануал по канвасу, а в случае тетриса — реализация идеи, что каждый программист должен написать свой тетрис, то уровень меня вполне удовлетворил.
Проект синтетический, пишется для обучения, поэтому не вижу особой необходимости в этом.
Разработчики позиционируют горутины как очень легкие и дешевые треды (которые не обязательноо являются настоящими тредами). И для го-программы нормально иметь тысячи горутин.
Насколько я помню асинхронный с виду браузерный js на самом деле однопоточный, и вызовы просто напросто встают в очередь, создавая видимость асинхронности. Не знаю как обстоят дела в Node.js, но если я правильно понимаю, асинхронность основана на последовательном выполнении функций в очереди вызовов, что не мешает это делать в нескольких потоках.
GOMAXPROCS можно задать через переменную окружения.
serve создает по горутине на каждое входящее соединение, таким образом отвечая на каждое входящее соединение, по сути, асинхронно.
Главный цикл — в горутине.
Отсылка ответа в отдельной горутине, что отмечено в тексте.
Поясните, что имеется ввиду под исключением упрощенного параллельного программирования.
Впрочем, можно добавить пвп элемент в следующем релизе и статье.
Решить это можно, например, ограничив количество отсылаемых данных сервером: не при каждом изменении оповещать клиентов, а в фиксированные промежутки слать снапшоты мира.
Помимо этого, лаги можно маскировать на клиенте, используя, например, интерполяцию данных.
Просто качество их реализации оставляет желать лучшего.
Хотя, учитывая что это не продукты для широкой аудитории, а просто, в случае бомбермена, упражнение на прочитанный мануал по канвасу, а в случае тетриса — реализация идеи, что каждый программист должен написать свой тетрис, то уровень меня вполне удовлетворил.
Что касается моих игр, я сам только учусь.
В сети есть только кривенькая поделка в стиле бомбермена на js.