Вторая коммуникационная служба, всегда присутствующая в стеке Darkstar, – служба каналов. Каналы относятся к типу коммуникаций «один ко многим». На концептуальном уровне к каналу может присоединиться любое количество клиентов, а любое передаваемое по каналу сообщение доставляется всем подключенным к нему клиентам. На первый взгляд кажется, что ситуация идеально подходит для технологий одноранговых коммуникаций, которые позволяют клиентам напрямую взаимодействовать друг с другом, не создавая нагрузки на сервер. Однако такие взаимодействия должны контролироваться кодом, который следит за тем, чтобы клиенты не обменивались недопустимыми сообщениями и не мошенничали за счет использования разных клиентских реализаций. Предполагается, что клиент находится под контролем пользователя или игрока, поэтому доверять коду на клиенте нельзя – исходный клиентский код легко подменяется другой, «адаптированной» версией. Следовательно, все сообщения каналов все равно должны проходить через сервер, а их «благонадежность» должна проверяться серверной логикой.
Одна из сложностей, связанных с использованием каналов и сеансов, заключается в том, что они должны соблюдать транзакционную семантику задач. Таким образом, фактическая передача сообщения по сеансовой линии или каналу не может происходить при вызове соответствующего метода send(); она может происходить только при закреплении транзакции той задачи, в которой вызывается этот метод.
С реализацией этих коммуникационных механизмов в нашем распоряжении появляются некоторые компоненты, необходимые для второй части механизма масштабирования. Поскольку все коммуникации должны проходить через абстракции сеансов или каналов Darkstar и поскольку эти абстракции не предоставляют клиенту или серверу доступ к фактическим конечным точкам обмена данными, между взаимодействующими сущностями и фактическим началом/концом передачи данных появляется абстрактная прослойка. Это означает, что конечную точку коммуникаций с сервером можно переместить с одного компьютера системы Darkstar на другой, не влияя на представление клиента о передаче данных. С точки зрения клиента все взаимодействия происходят в конкретном сеансе или канале. С точки зрения игры или логики виртуального мира взаимодействия также осуществляются через один сеанс или канал. Однако инфраструктура нижнего уровня может переместить сеанс или канал с одного компьютера на другой, чтобы обеспечить перераспределение нагрузки по мере ее изменения со временем.
Related posts: