В его то схеме как раз нет промежуточных состояний. Цена не совпадает - покупка не происходит. Цена совпадает - выкупается нужное количество (либо то, что есть). При этом не ожидается никаких промежуточных обновлений от клиента. Нажатие "купить" делает то же самое, что и обыкновенная покупка по селл-ордеру, но по каждой позиции по очереди, выдает купленное по факту, в шаблоне обновляет цены и колчиества. По своей сути это трейд-бот, и он целиком реализуется на стороне клиента.
Промежуточные состояния появляются, когда необходимо гарантировать неизменность таблицы маркета между моментом загрузки содержимого и цены и моментом запроса на покупку. Неизменность гарантируется транзакцией, в которую должно попасть И сообщение клиенту состояния маркета, И сообщение клиентом серверу решения о покупке. Т.е. общение клиент-сервер происходит внутри транзакции. Целостность транзакции гарантируется блокировкой таблицы, что не есть хорошо. Потому что это блокировка таблицы на время общения клиент-сервер. Отсутствие гарантии неизменности позволяет отказаться от запихивания в транзакцию клиент-серверного взаимодействия, и ограничиться только обеспечением целостности самого процесса покупки на сервере (что происходит при и обычной покупке). Даже если отказаться от блокировки таблицы на время проверки ордера глазками и понадеяться на допуск по ценам, рассчитывать покупки всё-равно придется серверу, которому клиент передаст допустимый коридор цен по каждой позиции, потому что только у сервера будет актуальная информация о маркете. При этом шило в виде потенциальной необходимости прокликать стопиццот раз для заполнения шаблона при механизме покупки по равенству цен заменяется на мыло с необходимостью прокликать стопиццот раз с изменением параметров шаблона, чтобы попасть на тот счастливый момент, когда сервер будет внезапно в состоянии удовлетворить этот шаблон целиком за один присест.
Сообщение отредактировал Infine: 21 May 2013 - 19:40