HeadlinesBriefing favicon HeadlinesBriefing.com

RuneScape на dial-up 56k в 2004

Hacker News •
×

В 2004 году я играл в RuneScape на модеме 56k, который отключался каждый раз, когда моя мама поднимала телефон. Мир в трех измерениях с до нескольких тысяч игроков полностью работал в браузере. Это работало благодаря непрерывному упражнению по неизречению байтов. При щелчке по плитке на севере каждый байт путешествует от щелчка к серверу и затем к экрану другого игрока. Центральная фонтан, площадь Варрока. Детали получены из декомпилированного клиента RuneScape 2 за 2004 год. Ограничения были строги: модем 56k синхронизируется со скоростью 56 килобит в секунду назад, примерно 5 КБ/с, с меньшей скоростью вперед. Широкополосный интернет уже был доступен к 2000 году, но большинство домов в Великобритании оставались на dial-up до конца 2000-х. Java-апплеты работают в безопасном песочном царстве, блокируя сырые необработанные сокеты и UDP. Каждый байт путешествует по одному соединению TCP, по порядку, с накладными расходами на сегмент. Сервер игры движется по циклическим дискретным шагам примерно в 600 миллисекунд. После рукопожатия входа устанавливается небольшой слой шифрования. Каждый пакет начинается с байта опкода, зашифрованного с помощью потокового шифра по имени ISAAC. Существует два потока — один от клиента к серверу, другой в обратном направлении. Обе стороны нуждаются в обоих потоках. Клиент генерирует два целочисленных зерна; сервер предоставляет другие два в рамках рукопожатия. Сервер-клиентский поток добавляет 50 к каждому слову, чтобы разделить направления. На выходе одна строка шифрует опкод: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } На входе зеркальное изображение восстанавливает его: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Только опкод зашифрован, защищая от сторонних парсеров. Отправка запроса на ходьбу запускает поиск в ширину перед любым сетевым взаимодействием.