Как делает сотрудничество в реальном времени с несколькими клиентской работой в системной операции использования преобразования с центральным сервером?

Я только что закончил читать Высокую Задержку, Работу с окнами Низкой Пропускной способности в Системе Сотрудничества Юпитера, и я главным образом следовал за всем до части 6: глобальная непротиворечивость. Эта часть описывает, как система, описанная в газете, может быть расширена для размещения для нескольких клиентов, подключенных к серверу. Однако объяснение очень коротко и по существу говорит, что система будет работать, если центральный сервер просто передаст клиентские сообщения всем другим клиентам. Я действительно не понимаю, как это работает все же. Какой вектор состояния был бы отправлен в сообщении, которое отправляется всем другим клиентам? Сервер поддерживает отдельные векторы состояния для каждого клиента? Это поддерживает отдельную копию виджетов локально для каждого клиента?

Простым примером, о котором я могу думать, является эта установка: вообразите клиент A, сервер и клиент B с клиентом A и клиентом B оба подключенный к серверу. Для запуска все три имеют объект состояния "ABCD". Затем клиент A отправляет, сообщение "вставляют символ F в положении 0" одновременно, клиент B отправляет, сообщение "вставляют символ G в положении 0" к серверу. Это походит на простую передачу сообщения клиента A клиенту B и наоборот на самом деле не обрабатывает этот случай. Таким образом, что точно сервер делает?

7
задан Saikat Chakrabarti 28 April 2010 в 22:32
поделиться

1 ответ

Я действительно понял, как это будет работать. В моем примере сервер хранит пространство состояний как для клиента A, так и для клиента B. В случае, когда сервер сначала получает сообщение клиента A, сервер получает сообщение с вектором состояния (0, 0), вставляет F, а затем обновляет свои векторы состояния. быть (1, 0) и (0, 1) для A и B, соответственно (где первое число - это количество сообщений от клиента, которые были обработаны, а второе - количество сообщений от сервера, которые были обработанный). Затем сервер отправляет «вставить F в позицию 0» с вектором состояния (0, 0) (поскольку это было состояние сервера в пространстве состояний B, когда сообщение было получено сервером) и получает «вставить G в позицию 0» от B отправлено с состоянием (0, 0). Поскольку сервер находится в состоянии (0, 1) в пространстве состояний B, он сначала преобразует сообщение (и аналогично, поскольку B находится в (1, 0), когда он получает сообщение сервера, он также преобразует сообщение, полученное от сервер). Поскольку преобразования должны быть настроены так, что если xform (c, s) = (c ', s'), то c ', примененный к s, равно s', примененный к c, B, и сервер в конечном итоге будет в том же состоянии. То же самое происходит с сообщением, которое сервер получил от B и затем отправил на A.

6
ответ дан 7 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: