Синхронизация состояния приложения с клиентами с помощью socketio - PullRequest
0 голосов
/ 24 февраля 2019

Я использую сервер узлов с SocketIO, который поддерживает большой объект (состояние приложения), который регулярно обновляется.

Все клиенты получают объект после подключения к серверу и должны постоянно обновлять его.время использования сокета (только для чтения).

Вот что я рассмотрел:

1: Извлечение дельты изменений для клиентов, использующих diff после обновления(требуется иметь дело с надежностью доставки и потерянными обновлениями)

2: Используйте пакет diffsync (однако он позволяет клиентам отправлять изменения на сервер, но мне нужны обновления, чтобыоднонаправленный, т.е. сервер -> клиенты)

Я уверен, что должно быть легкодоступное решение, чтобы справиться с этим, но я не смог найти окончательный ответ.

1 Ответ

0 голосов
/ 02 марта 2019

Решение очень простое.Вы должны изменить сервер , чтобы он принимал обновления только от доверенных клиентов.

let Server = require('diffsync').Server;
let receiveEdit  = Server.prototype.receiveEdit 
Server.receiveEdit = function(connection, editMessage, sendToClient){
  if(checkIsTrustedClient(connection))
    receiveEdit.call(this, connection, editMessage, sendToClient)
}

, но

    // TODO: implement backup workflow
    // has a low priority since `packets are not lost` - but don't quote me on that :P
    console.log('error', 'patch rejected!!', edit.serverVersion, '->', 
            clientDoc.shadow.serverVersion, ':',
            edit.localVersion, '->', clientDoc.shadow.localVersion);

Второй вариант - попытатьсянайти другое решение на основе jsondiffpatch

...