Как операционные преобразования справляются с разорванными соединениями?
Предположим, клиент отправляет insert(0, "A")
, но соединение прервано и никакого ответа не получено. Клиент может переподключиться.
Если клиент отклонит ожидающее изменение, оно будет потеряно, если сервер его не получит.
Если клиент повторно передает ожидающее изменение, оно будет продублировано, если сервер его получил.
Операция преобразовывает адрес, как этот случай должен быть обработан?
1 ответ
Я бы сказал, что это выходит за рамки конкретной операции преобразования. Это зависит от протокола, используемого для связи с сервером. (Также обратите внимание, что не все приложения операций преобразования полагаются на центральный сервер).
Если используется центральный сервер, обычно сервер отправляет подтверждение, чтобы сообщить, что он получил операцию. Однако что произойдет, если пропадет сигнал ACK? Это может быть смягчено, например, путем назначения идентификатора операциям: если сервер уже видел операцию с тем же идентификатором, он просто проигнорирует операцию и повторно отправит ACK.